C 二叉樹 四種遍歷 節點高度 子節點個數

2021-10-10 20:31:32 字數 2133 閱讀 1337

1.遍歷:前序遍歷、中序遍歷、後序遍歷、層次遍歷

前三者使用遞迴實現、層次遍歷使用佇列實現

2.計算某節點的高度:遞迴

3.計算以某節點為根節點的二叉樹的節點個數:遞迴

#include

#include

#include

using

namespace std;

template

<

class

t>

struct binarytreenode//定義二叉樹節點

binarytreenode

(const t& theelement)

binarytreenode

(const t& theelement, binarytreenode

* left, binarytreenode

* right)};

template

<

class

t>

intheight

(binarytreenode

* node)

//獲得某一節點下二叉樹的高度

template

<

class

t>

intcountnode

(binarytreenode

* node)

//獲取某一節點下二叉樹的節點個數

template

<

class

t>

class

binarytree

void

createtree()

//建立二叉樹

t l, r;

cin >> l >> r;

if(l !=-1

)if(r !=-1

)}nodearray.

clear()

;for

(int i =

0; i < treesize; i++

) nodearray.

push_back

(nullptr);

getarray

(root);}

void

preorder()

void

inorder()

void

postorder()

void

levelorder()

void

level_height()

void

level_countnode()

private

: binarytreenode

* root;

//根節點

int treesize;

//節點個數

vector

*> nodearray;

//按順序存放節點指標

void

preorder

(binarytreenode

* node)

//前序遍歷

}void

inorder

(binarytreenode

* node)

//中序遍歷

}void

postorder

(binarytreenode

* node)

//後序遍歷

}void

getarray

(binarytreenode

* node)

//前序遍歷二叉樹,把各個節點的指標按順序存放在指標陣列中

}void

levelorder

(binarytreenode

* node)

//層次遍歷

}void

level_height

(binarytreenode

* node)

//利用之前建立好的指標陣列,可直接按順序輸出以各節點為根節點的二叉樹的高度

}void

level_countnode

(binarytreenode

* node)

//利用之前建立好的指標陣列,可直接按順序輸出以各節點為根節點的二叉樹的節點個數}}

;

二叉樹四種遍歷方式

二叉樹的四種遍歷方式 include include using namespace std 二叉樹節點的定義 class treenode 遞迴方式,每個結點只遍歷一次,時間複雜度o 1 遞迴最多呼叫n次,空間複雜度o n 先序 根 遞迴左 遞迴右 void preorder treenode r...

輸出二叉樹葉子節點 葉子節點數目 二叉樹高度

include include 輸出二叉樹葉子節點 葉子節點數目 二叉樹高度 include typedef int datatype int count 0 用於統計葉子節點的數目 typedef struct node bitnode,bittree void creatbitree bittr...

二叉樹的四種遍歷方式

前言最近做題用到很多次二叉樹的遍歷,因此寫這篇文章記錄二叉樹的四種遍歷方式。首先為了方便,先假設二叉樹的結構如下 struct treenode 對於程式的輸入為 3 根節點root 9 20 4 10 15 71.二叉樹的層次遍歷 層次遍歷就是依次遍歷樹的每一層。借助佇列,可以輕鬆實現。void ...