求二叉樹中距離最遠的2個節點的距離
struct node ;
定義:空二叉樹的高度為-1,只有根節點的二叉樹高度為0,根節點在0層,深度為0。
兩個節點的距離為兩個節點間最短路徑的長度。
求兩節點的最遠距離,實際就是求二叉樹的直徑。假設相距最遠的兩個節點分別為a、b,它們的最近共同父節點(允許乙個節點是其自身的父節點)為c,則a到b的距離 = a到c的距離 + b到c的距離。
節點a、b分別在c的左右子樹下(假設節點c的左右兩子樹均包括節點c),不妨假設a在c的左子樹上,由假設「a到b的距離最大」,先固定b點不動(即b到c的距離不變),根據上面的公式,可得a到c的距離最大,即點a是c左子樹下距離c最遠的點,即:
a到c的距離 = c的左子樹的高度。
同理,b到c的距離 = c的右子樹的高度。
因此,本問題可以轉化為:「二叉樹每個節點的左右子樹高度和的最大值」。
static int tree_height(const node* root, int& max_distance)
int tree_diameter(const node* root)
根據平衡二叉樹的定義:每個結點的左右子樹的高度差小等於1,只須在計算二叉樹高度時,同時判斷左右子樹的高度差即可。
static int tree_height(const node* root, bool& balanced)
bool is_balanced_tree(const node* root)
二叉樹的一些簡單演算法(一)
二叉樹的一些簡單演算法 一 由於最近資料結構學到了樹的這一章節,而二叉樹的演算法一直被各大公司視為必考內容,因此,身為小菜菜的我也決定寫幾篇關於二叉樹的演算法 這次我簡單的寫一下二叉樹的建立和遍歷演算法 include using namespace std typedef char t class...
二叉樹的一些通用演算法 C
二叉樹的一些通用演算法,包括前 中 後 層遍歷,查詢指定節點 父節點,求樹高,最大最小節點 兩節點最近公共父節點,任一節點到根的路徑,任一節點在樹中的層次等。int element 4,5,6,3,1,9,8,7,2,10 define max a,b a b a b define array si...
二叉樹的一些概念
1 滿二叉樹 樹內的任何結點,或為樹葉 圖1中2689 或有兩個非空子樹。滿二叉樹定理 非空滿二叉樹樹葉的數目等於其分支結點數目加1。此外,乙個二叉樹第i層 根節點為0層 最多能有2的i次方個結點。圖12 平衡二叉樹 如果樹中任何結點的兩個子樹高度差是0或者1。對於圖1來說結點1左子樹高度為1,右子...