二叉樹的遍歷(遞迴與非遞迴)

2021-07-26 08:00:06 字數 903 閱讀 4667

二叉樹的遞迴遍歷的邏輯較簡單,寫法也簡單,遞迴遍歷左子樹,遞迴遍歷右子樹;對於二叉樹的非遞迴遍歷,我們需要借助stack(棧)這種資料結構來儲存我們每次遍歷到的節點,然後按照一定的順序彈出。

二叉樹的節點結構定義為:

struct treenode 

};

下面是二叉樹的遞迴遍歷**:

//先序遞迴遍歷

void preorder(treenode *t)

else

}//中序遞迴遍歷

void inorder(treenode *t)

else

}//後序遞迴遍歷

void postorder(treenode *t)

else

}

下面是二叉樹的非遞迴遍歷**:

//先序非遞迴遍歷

void preorder_1(treenode *t)

cout << endl;

}//中序非遞迴遍歷

void inorder_1(treenode* t)

node = s.top();

cout << node->val;

s.pop();

if (node->right == null)

node = null;

else

node = node->right; }

cout << endl;

}//後序非遞迴遍歷

void postorder_1(treenode* t)

while (!output.empty())

cout << endl;

}

二叉樹的遞迴遍歷與非遞迴遍歷

二叉樹的遞迴遍歷與非遞迴遍歷 include include include 本程式實現二叉樹的建立,遞迴遍歷與非遞迴遍歷 typedef struct tnode tnode,pnode 構造二叉樹 pnode createtree else pnode data data pnode lchil...

二叉樹的遞迴遍歷與非遞迴遍歷

二叉樹的遍歷有遞迴與非遞迴兩種方式,但思想大致相同 前序 先列印然後遍歷完他的左子樹,左子樹為空時開始返回,並且開始以棧中元素為根遍歷右子樹 中序 先遍歷左子樹然後左子樹入棧,左子樹為空再列印,再遍歷右子樹 後序 先遍歷完左子樹,左子樹入棧儲存,再遍歷右子樹,遍歷完列印,否則繼續入棧 遞迴遍歷 遞迴...

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...