# # 如果右子樹的高度等於整棵二叉樹的高度-1的話,那麼左子樹一定是一棵滿二叉樹,
# 這個時候我們就很容易的計算出總結點數nodes=2**(h)-1 + 1 +右子樹節點數(這裡的+1表示root節點)。
# 如果右子樹的高度不等於整棵二叉樹的高度-1的話,那麼左子樹不一定是一棵滿二叉樹,但是有一點可以確定,
# 右子樹一定是一棵滿二叉樹,這個時候我們就很容易的計算出總結點數nodes=2**(h-1)-1 + 1 +左子樹節點數(這裡的+1表示root節點)。
# 根據這個思路我們只要不斷迴圈下去直到root==none結束。
class solution2(object):
def countnodes(self, root):
""":typeroot: treenode
:rtype: int
"""def height(t):
h = -1
while t:
h += 1
t = t.left
return t
h = height(root)
nodes = 0
while root:
if height(root.right) == h-1:
nodes += 2**h
root = root.right
else :
nodes += 2**(h-1)
root = root.left
h -= 1
return nodes
class solution3(object):
def countnodes(self, root):
""":typeroot: treenode
:rtype: int
"""def getheight(node):
height = 0
tempnode = node
while tempnode:
height += 1
tempnode = tempnode.left
return height
nodes = 0
temproot = root
while temproot:
height = getheight(temproot)
rightheight = getheight(temproot.right)
if rightheight == height-1:
nodes += 2 ** (height-1)
temproot = temproot.right
else:
nodes += 2 ** (height-2)
temproot = temproot.left
return nodes
leetcode 二叉樹與遞迴
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 definition for a binary tree node....
二叉樹與遞迴
給中序遍歷和後續遍歷,求從根到葉子權值最小的路徑,的葉子節點的值。若有多條,求葉子最小的。include include include include using namespace std const intmaxn 10005 struct node intin maxn post maxn ...
二叉樹與遞迴
上圖是一顆二叉樹,二叉樹的特點是 二叉樹的每個節點的左右子樹也是一顆二叉樹 需要特殊說明的是,空 也是一顆二叉樹。二叉樹可以拆分為多個小二叉樹,小二叉樹的性質和大二叉樹的性質完全一樣。這種性質和遞迴演算法很相似,遞迴演算法也是把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解。我們...