leetcode 完全二叉樹節點個數

2021-10-04 09:54:31 字數 1032 閱讀 1825

給出乙個完全二叉樹,求出該樹的節點個數。

說明:完全二叉樹的定義如下:在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1~ 2h 個節點。

此題為求樹中節點個數,可以直接使用遞迴方法計算樹中遍歷樹中所有節點,計算節點總個數.該方法時間複雜度為o(n),n為樹的節點個數.然而由於題目中限制了樹的範圍,為完全二叉樹,因此我們考慮充分利用這一已知條件,設計演算法以取得更小的時間複雜度.

時間複雜度分析:

對於完全二叉樹,可以沿左子樹移動計算樹高度,因此計算樹高度時間複雜度為o(lgn).使用二分搜尋法判斷乙個節點是否存在最壞情形為移動到樹的最底層,因此時間複雜度為o(lgn), 由於使用二分搜尋法計算底層節點個數,需要搜尋lgn次,因此計算底層節點個數時間複雜度為o(lgn * lgn)

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

return height;

}//判斷在d層編號為index的節點是否存在

private

boolean

existnode

(int index,

int d, treenode root)

else

step++;}

return root != null;

//如果移動步數等於d-1步,則第d層編號為index的節點存在

}public

intcountnodes

(treenode root)

int bottomnum = lo;

return

(int

)math.

pow(

2, h-1)

-1+ bottomnum;

}}

完全二叉樹節點數

題目 給定一棵完全二叉樹的頭節點head,返回這棵樹的節點個數。如果完全二叉樹的節點數為n,請實現時間複雜度低於o n 的解法。方法 1 遞迴o n 演算法 int nodenum struct treenode head return 1 nodenum head left nodenum hea...

完全二叉樹節點數

給定一棵完全二叉樹的頭節點head,返回這棵樹的節點個數。如果完全二叉樹的節點數為n,請實現時間複雜度低於o n 的解法。package main import nc tools type treenode struct param head treenode類 return int整型 func ...

完全二叉樹節點個數

關於作者 最簡單的解法就是遍歷這棵樹,時間複雜度是o n 如果只是這一種解法,就不會有本文了。本文中給出兩種解法。第一次看到完全二叉樹的定義比較懵,搜尋到的定義如下 設二叉樹的深度為h,除第 h 層外,其它各層 1 h 1 的結點數都達到最大個數,第h層所有的結點都連續集中在最左邊,這就是完全二叉樹...