编写非递归遍历算法,实现:给定一棵二叉树的先序遍历·序列和中序遍历序列,输出后序遍历序列的代码
时间: 2024-05-07 15:22:55 浏览: 105
下面是给定一棵二叉树的先序遍历序列和中序遍历序列,输出后序遍历序列的非递归算法代码:
```python
def postorder_traversal(preorder, inorder):
if not preorder or not inorder:
return []
root = Node(preorder[0])
stack = [root]
i, j = 1, 0
while stack:
node = stack[-1]
if node.val == inorder[j]:
stack.pop()
j += 1
if j == len(inorder):
break
if not stack or inorder[j] != stack[-1].val:
node.right = Node(preorder[i])
i += 1
stack.append(node.right)
else:
node.left = Node(preorder[i])
i += 1
stack.append(node.left)
result = []
stack = [root]
while stack:
node = stack.pop()
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
result.append(node.val)
return result
```
该算法的时间复杂度为 O(n),其中 n 为二叉树的节点数。
阅读全文