程式設計之美系列之二叉樹1 二叉樹中的距離問題

2021-06-14 01:10:19 字數 1043 閱讀 7549

先來點基礎的,更多擴充套件,請猛擊:

1、首先來個入門級的,求二叉樹的深度

#include#includestruct node

;const int n = 20;

node node[n];

void add(int root, int num, bool isleft)

else }

inline int max(const int a, const int b)

int getdepth(node *proot)

int main()

nlen = getdepth(&node[0]);//資料輸入保證以0作為根節點

printf("樹的深度為:%d\n", nlen);

}}

2、求二叉樹中相距最遠的兩個節點之間的距離

這裡定義的距離可以是節點數,可以是邊樹,這個關係不大。這裡假設距離的定義是節點數,即乙個節點的距離是1.

兩種情況:要麼是根節點的左子樹和右子樹的最大距離之和。要麼就是左子樹裡面的最大距離或者右子樹裡面的最大距離。

#include#includestruct node

;const int n = 20;

node node[n];

int maxlen = 0;

//add函式和max函式如前面定義

int findmaxlen(node *proot)

//右子樹

if(!proot->right)

proot->maxright = 0;

else

maxlen = max(proot->maxleft + proot->maxright + 1, maxlen);//如果距離的定義是邊,則這裡不需要加1.

}int main()

findmaxlen(&node[0]);//資料輸入保證以0作為根節點

printf("樹中兩個節點的最大距離為:%d\n", maxlen);

}}

二叉樹之 二叉樹深度

二叉樹深度 獲取最大深度 public static int getmaxdepth treenode root 二叉樹寬度 使用佇列,層次遍歷二叉樹。在上一層遍歷完成後,下一層的所有節點已經放到佇列中,此時佇列中的元素個數就是下一層的寬度。以此類推,依次遍歷下一層即可求出二叉樹的最大寬度 獲取最大...

重建二叉樹(程式設計之美)

from 程式設計之美3.9 給出前序遍歷和中序遍歷,重新建立二叉樹,後序遍歷輸出。如下 1 include 2 include 3 4using namespace std 56 struct node7 1213 void aftertra node proot 1419 aftertra pr...

《程式設計之美》 重建二叉樹

問題 已知二叉樹的前序和中序遍歷結果,重建二叉樹。分析與解法 typedef struct node node,bitree 前序 中序 void repreinbuild bitree t,重建的二叉樹 char preorder,前序遍歷序列 char inorder,中序遍歷序列 int n ...