Python 中的二叉树后序遍历

pythonserver side programmingprogramming更新于 2026/1/15 10:52:17

假设我们有一棵二叉树。我们必须使用迭代方法找到这棵树的后序遍历。因此,如果树像 −

然后输出将是:[9,15,7,10,-10]

为了解决这个问题,我们将遵循以下步骤 −

  • 如果 root 为 null,则返回空数组

  • 创建一个数组 ret

  • stack := 定义一个带有 [root, 0] 对的堆栈

  • 当堆栈不为空时 −

    • node := 堆栈顶部,然后从中删除元素堆栈。

    • 如果节点对的第二个值为 0,则

      • 当前 := 节点对的第一个值

      • 将一对 (当前,1) 插入堆栈

      • 如果当前的右侧存在 −

        • 将一对 [当前右侧,0] 插入堆栈

      • 如果当前的左侧存在 −

        • 将一对 [当前左侧,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]

相关文章


有用资源