二叉樹兩個節點間的距離

2021-10-10 12:44:08 字數 1475 閱讀 1384

距離是指連線兩個節點需要的最小的邊的條數。

1找到節點的共同祖先

2 找到節點到共同祖先的距離dist,可以想到這個距離disthelper = 節點到root距離 - root到共同祖先的距離

3 兩個節點間距離 = 節點1到共同祖先的距離dist1 + 節點2到共同祖先的距離dist2

=節點1到root距離 - root到共同祖先的距離 + 節點2到root距離 - root到共同祖先的距離

// 二叉樹兩個節點之間的距離.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。

//#include "pch.h"

#include #include #include using namespace std;

//思路:找最小公共祖先,然後計算節點a到root距離ditsa、節點b到root距離distb,祖先節點到根節點距離distcommon,res = dista + distb - 2 * distcommon。

typedef struct node

}node;

node* findacentor(node* root, int num1, int num2)

node* l = findacentor(root->left, num1, num2);//去左子樹找兩個節點的祖先

node* r = findacentor(root->right, num1, num2);//去右子樹找兩個節點的祖先

if (l && r) return root;//兩個節點分別在root的左右子樹上,則返回root

return ((l == null) ? r : l);//兩個節點在左子樹或者右子樹上,返回左或者右

二叉樹兩個節點之間的最大距離

二叉樹兩個節點之間的最大距離,以根節點分析,最大距離可能有3種情況 左左 右右 左右 左左相當於求左子樹上的遞迴子問題,右右相當於求右子樹的遞迴子問題。左右是需要我們處理的問題。我們使用record陣列來記錄左邊的最大值和右邊的最大值。includeusing namespace std struc...

二叉樹中任意兩個節點間的距離 原始碼

include include templatestruct bnode void visit t data bnode left bnode right 獲取訪問路徑 templatestd list getpath bnode root,bnode node iter iter left whi...

二叉樹兩個節點的公共節點

很流行的乙個問題,常見於各種面試中,這裡有乙個很好的彙總.情況1.節點只有left right,沒有parent指標,root已知 情況2.root未知,但是每個節點都有parent指標 情況3.二叉樹是個二叉查詢樹,且root和兩個節點的值 a,b 已知 雖然情況一是第乙個情況,但是看上去比較複雜...