二叉樹的遍歷小結

2021-09-25 04:47:03 字數 2598 閱讀 7128

二叉樹的非遞迴方式有不同的寫法,今小結了前序、中序、後序三種遍歷方式,分別用一到兩種非遞迴方式寫出來,還是那句話,要重點理解其思想,還有會快速的實現出來

#include

#include

#include

using namespace std;

/** * 二叉樹相關

*/struct node

;/**

* 從陣列建樹

* 輸入:陣列

* 輸出:一顆二叉樹(小根堆)

*//**

* 二叉查詢樹的插入操作

* @param root 根節點

* @param key 待插入的值

* @return

*/node *

insertnode

(node *root,

int key)

if(key < root->value)

else

if(key > root->value)

return root;

}/**

* 建立二叉查詢樹

* @param a 輸入陣列

* @param n 陣列長度

* @return 二叉查詢樹

*/node *

createtree

(int

*a,int n)

return root;

}/**

* 前序遍歷:遞迴形式

*/void

preorder

(node *root)

}/**

* 中序遍歷:遞迴形式

* @param root

*/void

inorder

(node *root)

}/**

* 後序遍歷:遞迴形式

* @param root

*/void

postorder

(node *root)

}/**

* 前序遍歷:非遞迴形式 1

* step 1:訪問當前節點,當前節點的左孩子全部入棧;一直到沒有左孩子

* step 2:彈出棧頂節點,然後當前節點置為彈出元素右孩子,繼續step 1

* */

void

preorder1

(node *root)

if(s.

size()

!=0)}

}}/** * 前序遍歷:非遞迴形式 2

* 借助棧簡化

* step 1:根節點入棧

* step 2:出棧,訪問當前節點,當前節點右孩子入棧,然後當前節點左孩子入棧

* 直至棧為空結束

*/void

preorder2

(node * root)

if(root->lchild)}}

}/**

* 中序遍歷:非遞迴形式 1

* step 1:當前節點的左孩子全部入棧,一直到沒有左孩子

* step 2:彈出棧頂節點,訪問,然後當前節點置為彈出元素右孩子,繼續step 1

* */

void

inorder1

(node *root)

if(s.

size()

!=0)}

}}/** * 後序遍歷:非遞迴形式 1

* 使用乙個節點棧和資料值棧

* 1. 首先將當前節點的右孩子節點壓入節點棧,同時將當年節點的值壓入資料值棧

* 2. 然後依次取節點棧,將當前節點置為節點棧頂的左孩子,然後繼續step 1

* 3. 一直到節點棧為空,然後依次遍歷資料值棧

* @return

*/void

postorder1

(node *root)

root = nodestack.

top();

nodestack.

pop();

root = root->lchild;

}while

(valuestack.

size()

!=0)}

}/**

* 後序遍歷:非遞迴形式 2

* 後序遍歷的順序是:左 -> 右 -> 根,倒過來就是:根 -> 右 -> 左

* 和前序遍歷的區別在於左右子樹的順序相反,因此和前序非遞迴遍歷幾乎一樣

* 需要用到乙個棧存放資料,因為資料順序是倒的

* @param root

*/void

postorder2

(node * root)

if(root->rchild)

}while

(valuestack.

size()

!=0)}

}int

main()

; node *root =

createtree

(a,10);

postorder

(root)

; cout << endl;

postorder1

(root)

;return0;

}

二叉樹遍歷小結

二叉樹是相當重要的資料結構,目前我還只會玩玩它的遍歷 年輕不懂事沒好好學,不然早就達到人生巔峰了 leetcode上二叉樹的簡單題,大部分通過遍歷加一點小邏輯即可解決,所以總結一下幾種遍歷方法 其實也是看題解白嫖的 二叉樹遍歷有廣度優先,深度優先兩種方式,深度優先又分先序遍歷 根,左,右 中序遍歷 ...

二叉樹的遍歷 二叉樹遍歷與儲存

在資料結構中,二叉樹是非常重要的結構。例如 資料庫中經常用到b 樹結構。那麼資料庫是如何去單個查詢或者範圍查詢?首先得理解二叉樹的幾種遍歷順序 先序 中序 後序 層次遍歷。先序 根節點 左子樹 右子樹 中序 左子樹 根節點 右子樹 後序 左子樹 右子樹 根節點 按層級 class node if c...

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...