Python 中的二叉樹後序遍歷
假設我們有一棵二叉樹。我們必須使用迭代方法找到這棵樹的後序遍歷。所以如果樹是這樣的:
那麼輸出將是:[9,15,7,10,-10]
為了解決這個問題,我們將遵循以下步驟:
如果根節點為空,則返回空陣列
建立一個數組 ret
stack := 定義一個棧,其中包含 [root, 0] 對
當棧不為空時:
node := 棧頂元素,然後從棧中刪除元素。
如果節點對的第二個值是 0,則
current := 節點對的第一個值
將 (current, 1) 對插入棧中
如果 current 的右子節點存在:
將 [current 的右子節點, 0] 對插入棧中
如果 current 的左子節點存在:
將 [current 的左子節點, 0] 對插入棧中
否則,當節點對第一個值的 data 不為 0 時,將節點對第一個值的 data 插入 res 中
返回 res
示例
讓我們看看下面的實現,以便更好地理解:
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree class Solution(object): def postorderTraversal(self, root): if not root: return [] res = [] stack = [[root,0]] while stack: node = stack[-1] stack.pop() if node[1]== 0 : current = node[0] stack.append([current,1]) if current.right: stack.append([current.right,0]) if current.left: stack.append([current.left,0]) else: if node[0].data != 0: res.append(node[0].data) return res ob = Solution() root = make_tree([-10,9,10,None,None,15,7]) print(ob.postorderTraversal(root))
輸入
[-10,9,10,None,None,15,7]
輸出
[9, 15, 7, 10, -10]
廣告