先序遍历和中序遍历和后序遍历的区别
时间: 2024-05-29 07:16:04 浏览: 82
先序遍历、中序遍历和后序遍历都是二叉树的遍历方式,它们的区别在于遍历节点的顺序不同。
先序遍历是指先遍历根节点,然后遍历左子树,最后遍历右子树,即根-左-右的顺序。
中序遍历是指先遍历左子树,然后遍历根节点,最后遍历右子树,即左-根-右的顺序。
后序遍历是指先遍历左子树,然后遍历右子树,最后遍历根节点,即左-右-根的顺序。
不同的遍历方式可以用于不同的问题,比如先序遍历和后序遍历可以用于构建表达式树,中序遍历可以用于查找二叉搜索树中的元素等等。
相关问题
先序遍历 中序遍历 后序遍历
先序遍历、中序遍历和后序遍历都是二叉树的遍历方式。
先序遍历:先访问根节点,再先序遍历左子树,最后先序遍历右子树。
中序遍历:先中序遍历左子树,再访问根节点,最后中序遍历右子树。
后序遍历:先后序遍历左子树,再后序遍历右子树,最后访问根节点。
以上三种遍历方式都有各自的应用场景,如先序遍历适合复制一棵树,中序遍历适合查找一个节点,后序遍历适合计算一个节点的值等。
非递归遍历,一个先序遍历和中序遍历得后序遍历代码
以下是非递归实现的先序遍历、中序遍历和后序遍历的代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def preorderTraversal(root: TreeNode) -> List[int]:
if not root:
return []
stack = [root]
res = []
while stack:
node = stack.pop()
res.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return res
def inorderTraversal(root: TreeNode) -> List[int]:
if not root:
return []
stack = []
res = []
node = root
while stack or node:
while node:
stack.append(node)
node = node.left
node = stack.pop()
res.append(node.val)
node = node.right
return res
def postorderTraversal(root: TreeNode) -> List[int]:
if not root:
return []
stack1 = [root]
stack2 = []
res = []
while stack1:
node = stack1.pop()
stack2.append(node)
if node.left:
stack1.append(node.left)
if node.right:
stack1.append(node.right)
while stack2:
node = stack2.pop()
res.append(node.val)
return res
```
这里给出了三个函数分别用于先序遍历、中序遍历和后序遍历,每个函数都是非递归实现的。这些函数都接受一个二叉树的根节点作为输入,并返回对应的遍历结果。
阅读全文