面試題88 二叉樹中結點的最大距離

2021-07-11 06:47:06 字數 893 閱讀 8278

題目:

如果我們把二叉樹看成乙個圖,父子結點之間的連線看成是雙向的,我們姑且定義「距離」為兩結點之間邊的個數。

寫乙個程式求一棵二叉樹中兩個結點之間的距離。

思路:求兩個結點之間的最大距離,可以分為兩種情況:

第一、兩個結點經過了根結點。

第二、兩個結點不經過根結點。

總結就是,我們可以求出每個結點的左右高度,那麼經過該結點最長路徑就是:左子樹高度+右子樹高度。

最後找出所有結點對應的最長路徑的最大值就是我們需要的。

實現如下:

#include using namespace std;

struct node

};int getmaxlength(node *root, int &max)

int main()

{ int max = 0;

node *n1 = new node(1);

node *n2 = new node(2);

node *n3 = new node(3);

node *n4 = new node(4);

node *n5 = new node(5);

node *n6 = new node(6);

node *n7 = new node(7);

node *n8 = new node(8);

node *n9 = new node(9);

n1->left = n2;

n1->right = n3;

n2->left = n4;

n2->right = n5;

n4->left = n6;

n6->left = n7;

n5->left = n8;

n8->left = n9;

cout<

二叉樹面試題

1.求二叉樹節點個數 可以使用遞迴解決。將問題分解為求根節點 左子樹的節點數 右節點的節點數。實現 public size t size private size t size node root 2.求頁節點個數 頁節點 左右子樹都為空的節點被稱為頁節點,使用遞迴遍歷,當碰到乙個左右子樹為空的節點...

面試題 二叉樹

面試題 二叉樹 1.重建二叉樹 前序 中序 treenode reconstructbinarytree vector pre,vector vin treenode root new treenode pre 0 int pos 0 for pos pre left,vin left,pre ri...

二叉樹的最大深度 基礎面試題

給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 返回它的最大深度 3 1,採用遞迴思想 一棵樹樹的最大深度 1 左子樹的最大深度 右子樹的最大深度 2,public intmaxdepth treenode root ...