二叉樹的非遞迴遍歷C 實現

2022-06-10 23:24:14 字數 1162 閱讀 4718

#include#include#define maxsize 100

using namespace std;

typedef struct btnode*bitnode;

void createtree(btnode *&root)

root->val = c;

createtree(root->lchild);

createtree(root->rchild);

}}void preorderrecursion(btnode *root)

}void preordernorecursion(btnode *root)

btnode* stack[maxsize]; //模擬乙個棧

int top = -1; //棧頂指標

stack[++top] = root;

while(top != -1)

}void inorderrecursion(btnode *root)

}void inordernorecursion(btnode *root)

btnode* stack[maxsize];

int top = -1;

btnode *p = root;

while(top != -1 || p != null)

//從根節點一直往左子樹遍歷,如果沒有左子樹

//列印這個節點,往右節點移動

p = stack[top--];

cout << p->val << " ";

p = p->rchild;

}}void postorderrecursion(btnode *root)

}void postordernorecursion(btnode *root)

btnode* stack1[maxsize]; int top1 = -1;

btnode* stack2[maxsize]; int top2 = -1;

//首先把根節點如stack1

stack1[++top1] = root;

while(top1 != -1)

//此時倒序輸出stack2即為後序遍歷的序列

while(top2 != -1)

}int main()

二叉樹非遞迴遍歷c 實現

三種遍歷演算法均採用棧來實現 1.前序遍歷 先訪問根節點,再訪問左子樹,最後訪問右子樹 先將根節點進棧,棧不空時迴圈 2.中序遍歷演算法 左中右 從根節點開始,將所有左節點一一進棧,當無左節點時表示棧頂節點無左子樹,然後出棧這個節點,並訪問它,將tmp指向剛出棧節點的右孩子節點,對右子樹進行同樣的處...

二叉樹遍歷 遞迴 非遞迴實現

先序遍歷中序遍歷 後序遍歷 根結點 左子樹 右子樹 左子樹 根子樹 右子樹 左子樹 右子樹 根結點 先序遍歷 void preorder btree t 中序遍歷 void inorder btree t 後序遍歷 void postorder btree t 遞迴 recursion 就是子程式 ...

二叉樹遍歷的非遞迴實現

最近在看二叉樹的非遞迴呼叫,書上 寫的蠻清楚,但是一些細節需要深入的思考才會理解掌握。先根遍歷比較簡單,不斷的尋找根的左節點,並輸出,同時將對應節點的右節點壓入棧中,直到左節點為空,將棧頂元素出棧,作為根重複上述操作,直到棧為空。中根遍歷,將根節點左節點,左節點的左節點.依次入棧,直到最後乙個無左節...