距離是指連線兩個節點需要的最小的邊的條數。
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 已知 雖然情況一是第乙個情況,但是看上去比較複雜...