輸入**:
#include #include #define maxsize 100
typedef char elemtype;
using namespace std;
typedef struct node
btnode;
/*建立二叉樹
*/void createbtnode(btnode *&b,char *str)}}
j++;
ch=str[j];
}}void preorder1(btnode *b) //先序非遞迴遍歷演算法
if(p->lchild!=null) //左孩子節點進棧
}printf("\n");
}}void inorder(btnode *b) //中序遍歷非遞迴演算法
//執行到此處時,棧頂元素沒有左孩子或左子樹均已訪問過
if(top>-1)
}printf("\n");
}}void postorder(btnode *b) //後序遍歷的非遞迴演算法
//執行到此處時,棧頂元素沒有左孩子或者左子樹均已訪問過
p=null; //p指向棧頂節點的前乙個已訪問過的節點
flag=1; //表示*b的左孩子已訪問或為空
while(top!=-1&&flag)
else}}
while(top!=-1);
printf("\n");
}}int main()
執行截圖:
二叉樹遍歷 非遞迴演算法
文庫文章 二叉樹前序遍歷 根 左結點 右結點 所以在訪問到乙個節點不為空時 先訪問此結點,然後把此結點的非空右孩子先入棧,然後再把非空左孩子入棧。具體 如下 二叉樹後序非遞迴演算法 第二種思路 要保證根結點在左孩子和右孩子訪問之後才能訪問,因此對於任一結點p,先將其入棧。如果p不存在左孩子和右孩子,...
二叉樹遍歷非遞迴演算法
遞迴演算法非常的簡單。先訪問跟節點,然後訪問左節點,再訪問右節點。如果不用遞迴,那該怎麼做呢?仔細 一.先序遍歷 看一下遞迴程式,就會發現,其實每次都是走樹的左分支 left 直到左子樹為空,然後開始從遞迴的最深處返回,然後開始恢復遞迴現場,訪問右子樹。由於一直走到最左邊後,需要逐步返回到父節點訪問...
二叉樹遍歷(遞迴 非遞迴)
二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...