使用迴圈的方式遍歷二叉樹

2021-08-08 18:25:26 字數 1361 閱讀 9014

每個結點最多有兩棵子樹,左子樹和右子樹,次序不可以顛倒。

性質:

1、非空二叉樹的第n層上至多有2^(n-1)個元素。

2、深度為h的二叉樹至多有2^h-1個結點。

滿二叉樹:所有終端都在同一層次,且非終端結點的度數為2。

在滿二叉樹中若其深度為h,則其所包含的結點數必為2^h-1。

完全二叉樹:除了最大的層次即成為一顆滿二叉樹且層次最大那層所有的結點均向左靠齊,即集中在左面的位置上,不能有空位置。

對於完全二叉樹,設乙個結點為i則其父節點為i/2,2i為左子節點,2i+1為右子節點。

遍歷即將樹的所有結點訪問且僅訪問一次。按照根節點位置的不同分為前序遍歷,中序遍歷,後序遍歷。

前序遍歷:根左右

中序遍歷:左跟右

後序遍歷:左右根

(規律:就是訪問根節點的順序。)

例如:求下面樹的三種遍歷

前序遍歷:abdecfg

中序遍歷:dbeafcg

後序遍歷:debfgca

#include 

#include

using

namespace

std;

struct binarytreenode

;//構建二叉樹

binarytreenode * createtree()

//遞迴實現前序遍歷

void qianxubl(binarytreenode * root)

}//非遞迴實現前序遍歷

void xunhuanqianxubianli(binarytreenode * root)

while (temp || ss.size() > 0)

temp = ss.top();

ss.pop();

temp = temp->m_pright;

}}//非遞迴實現後續遍歷

void xunhuanzhongxubianli(binarytreenode * root)

binarytreenode * proot = root;

while (proot || ss.size() > 0)

binarytreenode * temp = ss.top();

ss.pop();

cout

<< temp->m_nvalue << " ";

proot = temp->m_pright;

}}//咳咳,非遞迴實現後續遍歷暫時沒寫

int main()

二叉樹遍歷方式

先序遍歷 根 左子樹 右子樹 遞迴版本 public static void preprint treenode root 非遞迴版本 public static void preorder treenode root if s.empty 中序遍歷 左子樹 根 右子樹 遞迴版本 public st...

二叉樹幾種遍歷方式

一 基本概念 每個結點最多有兩棵子樹,左子樹和右子樹,次序不可以顛倒。性質 1 非空二叉樹的第n層上至多有2 n 1 個元素。2 深度為h的二叉樹至多有2 h 1個結點。滿二叉樹 所有終端都在同一層次,且非終端結點的度數為2。在滿二叉樹中若其深度為h,則其所包含的結點數必為2 h 1。完全二叉樹 除...

二叉樹遍歷方式彙總

include using namespace std struct bitreenode bitreenode init tree vector nums else return root void pre order r bitreenode root void in order r bitre...