用兩種方法先序遍歷
1. 訪問根-根節點入棧-若有左孩子,訪問,入棧;若無,回到父節點(top)找右孩子訪問右孩子;迴圈入棧
2. 迴圈 每次訪問根節點-右孩子壓棧-訪問左孩子
原理:先序遍歷:根左右,所以訪問根-把右孩子壓棧-先訪問左孩子
我傾向於方法二,思路很清晰
#include #include "stack"
using namespace std;
struct tnode
;tnode *root;
void visit(tnode *cur)
else
}}stackst2;
void preorder2(tnode *root)//method 2
else
}}void inittree(tnode *root)
tree[4]->right=tree[6];
tree[1]->left=tree[3];
tree[1]->right=tree[4];
tree[2]->left=tree[5];
tree[0]->left=tree[1];
tree[0]->right=tree[2];
root=tree[0];
}void main()
二叉樹非遞迴先序遍歷
二叉樹的遞迴先序遍歷很簡單,假設二叉樹的結點定義如下 1 struct binarytreenode 2 遞迴先序遵循 根 左 右的順序 1 void preorder binarytreenode root 2非遞迴我們以乙個例子說明,仍然以之前博文的乙個二叉樹說明 1 82 36 104 55 ...
二叉樹先序遍歷(c語言,非遞迴)
已知二叉樹按照二叉鍊錶方式儲存,利用棧的基本操作寫出先序遍歷非遞迴形式的演算法 void pre order bitree root 在遍歷過程中,pre order函式需要呼叫 visit node 函式來實現對結點的訪問,該函式宣告如下 void visit node bitnode node ...
非遞迴先序遍歷二叉樹 2
非遞迴先序遍歷二叉樹 include define maxsize 100 typedef char datatype 二叉鍊錶型別定義 typedef struct binnode binnode,bintree 順序棧型別定義 typedef struct seqstk 初始化棧 int ini...