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