二叉樹前中後序遍歷非遞迴及應用

2021-07-09 06:35:56 字數 1506 閱讀 2833

#include #include #define m 50

typedef struct nodebtnode,*btree;

void preorder(btree t)//前序非遞迴

p=stack[top--];

p=p->rlink;

}while(!(p==null&&top==-1));

}void inorder(btree t)//中序非遞迴

p=stack[top--];

visit(p);

p=p->rlink;

}while(!(p==null&&top==-1));

}void postorder(btree t)//後序非遞迴

p=stack1[top];

flag=stack2[top--];

if(flag==0)

else

}while(!(p==null&&top==-1));

}int depthbt(btree t)//中序求深度

p=stack1[top];

curdepth = stack2[top--];

if(p->llink ==null&&p->rlink==null)

if(curdepth>maxdepth)

maxdepth=curdepth;

p=p->rlink;

curdepth++;

}while(!(p==null&&top==-1));

} return (maxdepth);

}int layer(btree t,int a)//層次後續非遞迴

p=stack1[top];

flag=stack2[top--];

if(flag==0)

else

}while(!(p==null&&top==-1));

}btree deletebt(btree t,int a)//刪除前序非遞迴

else

else

stack[++top]=p;

q=p;

p=p->llink;

}p=stack[top--];

q=p;

p=p->rlink;

}while(!(p==null&&top==-1)); }}

int sum_n1(btree t)//度為1的前序非遞迴

p=stack[top--];

p=p->rlink;

}while(!(p==null&&top==-1));

return n;

}void ancestor(btree t,int a)//元素祖先後續非遞迴

p=stack1[top];

flag=stack2[top--];

if(flag==0)

else

else

p=null;

}}while(!(p==null&&top==-1));

}

二叉樹前中後序遍歷非遞迴實現C

前幾天面試過程中面試官讓手寫一下二叉樹後序遍歷的非遞迴寫法,當時沒有寫出來,本想著可能是因為面試太緊張的原因,才這麼簡單的題都沒寫出來,後來特地去研究了一下,發現二叉樹的後序遍歷非遞迴實現還真的沒我想的那麼簡單,在此寫個部落格記錄一下,順便把前序和中序的非遞迴實現也寫出來。其實不管是前序 中序還是後...

二叉樹前中後序遍歷

前序遍歷a b d f g h i e c 中序遍歷f d h g i b e a c 後序遍歷f h i g d e b c a 前序 根左右 中序 左根右 後序 左右根 已知某二叉樹的前序遍歷為a b d f g h i e c,中序遍歷為f d h g i b e a c,請還原這顆二叉樹。思...

二叉樹前中後序遍歷

二叉樹 6.先序遍歷 10分 請編寫遞迴函式,實現二叉樹的先序遍歷。函式原型 先序遍歷 void bintreepreorder const tnode root 說明 root為二叉樹或子樹的根指標。在標頭檔案 bintree.h 新增函式宣告。bintree.h 先序遍歷 void bintre...