Python 编程中的二叉树后序遍历
c++server side programmingprogramming
假设我们有一棵二叉树。我们必须使用迭代方法找到这棵树的后序遍历。因此,如果树像 −
然后输出将是:[9,15,7,10,-10]
为了解决这个问题,我们将遵循以下步骤 −
如果 root 为 null,则返回空数组
创建一个数组 ret
stack := 定义一个带有 [root, 0] 对的堆栈
当堆栈不为空时 −
node := 堆栈顶部,然后从中删除元素堆栈。
如果节点对的第二个值为 0,则
current := 节点对的第一个值
将 pair (current,1) 插入堆栈
如果 current 右侧存在
将 pair [right of current,0] 插入堆栈
如果 current 左侧存在 −
将 pair [left of current,0] 插入堆栈
否则当第一个值节点对的数据不为0时,则将节点第一个值的数据插入到res中
return 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]