思路:
先前序遍歷這顆樹的每個節點,如果遍歷到的節點有子節點,就交換它的兩個子節點。當交換完所有非葉節點的左右節點之後就得到了樹的映象。
class treenode:
def __init__(self, x):
self.val = x
self.left = none
self.right = none
class solution:
# 返回映象樹的根節點
def mirror(self, root):
"""遞迴"""
# write code here
if root == none:
return
elif root.left == none and root.right == none:
return root
pflog = root.left
root.left = root.right
root.right = pflog
self.mirror(root.left)
self.mirror(root.right)
def preorder(self,node):
"""前序遍歷"""
if node is none:
return
print(node.val,end='')
self.preorder(node.left)
self.preorder(node.right)
def mirror2(self,root):
"""非遞迴"""
if root ==none:
return
stacknode =
while len(stacknode)>0:
nodenum = len(stacknode)-1
tree = stacknode[nodenum]
stacknode.pop()
nodenum -= 1
if tree.left != none or tree.right !=none:
tree.left,tree.right = tree.right,tree.left
if tree.left:
nodenum+=1
if tree.right:
nodenum+=1
if __name__ == '__main__':
pnode1 = treenode(8)
pnode2 = treenode(6)
pnode3 = treenode(10)
pnode4 = treenode(5)
pnode5 = treenode(7)
pnode6 = treenode(9)
pnode7 = treenode(11)
pnode1.left = pnode2
pnode1.right = pnode3
pnode2.left = pnode4
pnode2.right = pnode5
pnode3.left = pnode6
pnode3.right = pnode7
s= solution()
s.preorder(pnode1)
print('\n')
# s.mirror(pnode1)
s.mirror2(pnode1)
s.preorder(pnode1)
劍指offer 27 二叉樹的映象
宣告 本系列部落格是對何海濤 劍指offer 的關鍵點總結。1.樹的映象 定義 樹的根結點相同,但是左右兩個子節點交換了位置 2.解題思路 1 前序遍歷樹的每乙個結點 2 如果遍歷到的節點有子節點,則交換其左右兩個子節點 3 分別以左子節點和右子節點作為新的根結點,遞迴呼叫該函式 4 當遍歷到的結點...
劍指Offer 27 二叉樹的映象
請完成乙個函式,輸入一棵二叉樹,該函式輸出它的映象。例 8 8 6 10 10 6 5 7 9 11 11 9 7 5交換左右子樹,遍歷至葉節點終止即可。時間複雜度 o n 空間複雜度 o 1 def mirror of binary tree root param root root return...
劍指offer 27 二叉樹的映象
面試題27.二叉樹的映象 難度簡單15 請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。例如輸入 4 2 7 1 3 6 9 映象輸出 4 7 2 9 6 3 1 示例 1 輸入 root 4,2,7,1,3,6,9 輸出 4,7,2,9,6,3,1 時間複雜度 o n 建立二叉樹的所有結點遍歷...