二叉樹三種遍歷方式的六種實現方法

2021-08-02 15:45:58 字數 1755 閱讀 9868

**

一、基本概念

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

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

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

3、對任何一棵二叉樹t,如果其終端結點數(即葉子結點數)為n0,度為2的結點數為n2,則n0 = n2 + 1。

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

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

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

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

二、二叉樹的遍歷

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

前序遍歷:根節點->左子樹->右子樹(根節點在前面)

中序遍歷:左子樹->根節點->右子樹(根節點在中間)

後序遍歷:左子樹->右子樹->根節點(根節點在後邊)

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

前序遍歷:abdefgc

中序遍歷:debgfac

後序遍歷:edgfbca

三、二叉樹三種遍歷方式的六種實現方法

[cpp]view plain

copy

#include 

#include 

#include 

#include 

using

namespace

std;  

struct

node  

;  };  

void

creatbitree(node * &root)  

root = new

node(x);  

creatbitree(root->left);  

creatbitree(root->right);  

}  void

visit(node *t)  

/**遞迴方式遍歷**/

//先序遞迴遍歷

void

preorder(node * root)  

}  //中序遞迴遍歷

void

inorder(node * root)  

}  //後序遞迴遍歷

void

postorder(node * root)  

}  /**非遞迴方式遍歷**/

//先序遍歷

void

preorderf(node * root)  

}  //中序遍歷

void

inorderf(node * root)  

else

}  }  //後序遍歷

void

postorderf(node * root)  

for(int

i = 0; i 

cout <

;  }  

int_tmain(

intargc, _tchar* argv)    

二叉樹三種遍歷方式

三種遍歷方式是按照根節點的訪問順序來定義的 1 前序遍歷 先訪問根結點 然後遍歷左子樹,最後遍歷右子樹 並且,在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。根左右 2 中序遍歷 先遍歷左子樹 然後訪問根結點,最後遍歷右子樹 並且,在遍歷左 右子樹時,仍然先遍歷左子樹,然後訪問...

二叉樹的三種遍歷方式java實現

1 先 根 序遍歷的遞迴演算法定義 若二叉樹非空,則依次執行如下操作 訪問根結點 遍歷左子樹 遍歷右子樹。2 中 根 序遍歷的遞迴演算法定義 若二叉樹非空,則依次執行如下操作 遍歷左子樹 訪問根結點 遍歷右子樹。3 後 根 序遍歷得遞迴演算法定義 若二叉樹非空,則依次執行如下操作 遍歷左子樹 遍歷右...

重建二叉樹 遍歷二叉樹的三種方式

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。示例 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7限制 0 節點個數 5000 這個題的解法...