題目:
如果我們把二叉樹看成乙個圖,父子結點之間的連線看成是雙向的,我們姑且定義「距離」為兩結點之間邊的個數。
寫乙個程式求一棵二叉樹中兩個結點之間的距離。
思路:求兩個結點之間的最大距離,可以分為兩種情況:
第一、兩個結點經過了根結點。
第二、兩個結點不經過根結點。
總結就是,我們可以求出每個結點的左右高度,那麼經過該結點最長路徑就是:左子樹高度+右子樹高度。
最後找出所有結點對應的最長路徑的最大值就是我們需要的。
實現如下:
#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 ...