重點 求一棵完全二叉樹的節點個數

2021-10-04 17:12:46 字數 1072 閱讀 4705

已知一棵完全二叉樹,求其節點的個數

要求:時間複雜度低於o(n),n為這棵樹的節點個數

若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。

首先判斷根節點的右子樹的左邊界。

左子樹的左邊界在最後一層。

左子樹為滿二叉樹,高度為lh=h-1。那麼左子樹的節點個數為(1 << lh) - 1也就是2的lh次方減一。

2. 右子樹的左邊界沒到最後一層

- 右子樹為滿二叉樹,但是高度比左子樹小1

- 所有節點數 = 右子樹 + 根節點 + 左子樹

如何計算:

情況1的時候,左子樹為滿二叉樹,左子樹節點為(1 << 左子樹高度) - 1,加上根節點1,右子樹此時為滿二叉樹。

所有節點數 = (1 << 左子樹高度) + 右子樹節點數(遞迴計算)

情況2的時候,同理。

public

class

completetreenodenumber

}public

static

intnodenum

(node head)

/** * @param node 當前節點

* @param level 層次

* @param h 整棵樹的高度

* @return 樹的所有節點數量

*/public

static

intbs

(node node,

int level,

int h)if(

heightoftree

(node.right, level +1)

== h)

else

}private

static

intheightoftree

(node head,

int level)

return level -1;

}}

二叉樹 求一棵完全二叉樹節點的個數

已知一棵完全二叉樹,求其節點的個數 要求 時間複雜度低於o n n為這棵樹的節點個數 結論 滿二叉樹 高度為l,結點個數 2 l 1個 先遍歷左邊界,求出完全二叉樹的高度h 然後遍歷樹的右子樹的左邊界,看它到沒到最後一層,如果到了最後一層,那麼證明它的左子樹是滿的,高度是h 1 左子樹的結點數2 h...

求完全二叉樹的節點個數

題目 給定乙個完全二叉樹的頭結點,求節點的個數。要求時間複雜度低於o n 思路 利用完全二叉樹的特點,分別求出左右子樹的高度l1,r1,如果l1 r1,則左子樹是滿二叉樹,根據高度直接求出節點 個數,接著遞迴右子樹。同理如果l1 r1,則右子樹是滿二叉樹,直接得到右子樹的節點個數,遞迴左子樹。pub...

求完全二叉樹的節點個數

已知一棵完全二叉樹,求其節點的個數 要求 時間複雜度低於o n n為這棵樹的節點個數 因為是完全二叉樹,除了最後一層都是填滿的,因此我們可以利用這個性質。首先求出這個二叉樹最大的高度,然後求其右子樹的最大高度,如果兩者是相等的,就說明左邊是填滿的,我們可以直接計算數量,否則的話就說明右面的最大高度是...