要求複雜度小於o(n),一提到複雜度小於o(n)就應該想到二分法。
一開始想到的是對倒數第二行用二分法,但是要儲存倒數第二行的結點需要層次遍歷,複雜度是o(n)。
所以就要從根結點開始每一層都用一次二分法,複雜度就是o(d**2) = o((logn)**2)。每一層的二分法的目的是找到最後一層的最後乙個結點在目前這個結點的左子樹還是右子樹。
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution:
def compute_depth(self, node: treenode) -> int:
"""return tree depth in o(d) time.
"""d = 0
while node.left:
node = node.left
d += 1
return d
# 這個函式的複雜度是o(d) = o(logn)
222 完全二叉樹的節點個數
給出乙個完全二叉樹,求出該樹的節點個數。說明 完全二叉樹的定義如下 在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1 2h 個節點。示例 輸入 1 2 3 4 5 6 輸出 6 defini...
222 完全二叉樹的節點個數
1.使用遞迴來實現 class solution 2.根據完全二叉樹的性質簡化遍歷次數 功能 判斷最後一層第index個索引是否存在 root 二叉樹根節點 index 判斷最後一層索引為index的節點是否存在,索引範圍是 1,2 depth depth 倒數第二層的深度,這是因為滿二叉樹最後一層...
222 完全二叉樹的節點個數
給出乙個完全二叉樹,求出該樹的節點個數。說明 完全二叉樹的定義如下 在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1 2h 個節點。示例 輸入 1 2 3 4 5 6 輸出 6 class ...