用python写一段代码:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [1] 输出:[1] 提示: 树中节点数目在范围 [0, 100] 内 -100 <= Node.val <= 100 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/binary-tree-inorder-traversal 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution: def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
时间: 2023-11-22 09:52:41 浏览: 83
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
stack = []
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
res.append(root.val)
root = root.right
return res
```
这个代码中,我们使用了一个栈来模拟中序遍历的过程。首先将左子树全部入栈,然后进行出栈操作,将当前节点的值加入结果列表中,并将右子树作为下一个待处理节点,继续遍历。当栈为空并且当前节点也为空时,遍历结束。
相关问题
二叉树遍历还原给出二叉树的中序遍历序列和后序遍历序列,编程还原该二叉树。 输入: 第1行为二叉树的中序遍历序列 第2行为二叉树的后序遍历序列 输出: 二叉树的按层遍历序列
在计算机科学中,当给定一个二叉树的中序遍历序列(In-order traversal)和后序遍历序列(Post-order traversal),我们可以利用这两个序列的信息重建整个二叉树。这是因为中序遍历可以得到节点值有序的左子树、根节点、右子树顺序,而后序遍历则是左子树、右子树、根节点的顺序。
以下是基本步骤:
1. **创建空堆栈**:用于存储后序遍历中的元素,因为后序遍历最后一个访问的是根节点。
2. **中序遍历序列**:
- 遍历过程中,遇到节点值就压入堆栈,因为中序遍历左子树->根节点->右子树。
3. **后序遍历序列**:
- 当后序遍历的第一个元素与当前堆栈顶元素匹配时,说明找到了根节点,将它弹出并作为新二叉树的根,同时记录它的左右子节点。
4. **构建二叉树**:继续从后序遍历中移除元素,直到遍历完,此时堆栈只剩下一个节点,它是右子节点;然后将其与前一个找到的根节点连接起来。
最后,我们需要按照层序遍历(Level Order Traversal)的规则打印出二叉树:从上到下,同一层从左到右。
以下是Python的一个示例代码片段,假设输入序列已经存储在`inorder`和`postorder`变量中:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def buildTree(inorder, postorder):
if inorder and postorder:
root_val = postorder.pop() # 根据后序遍历找到根节点
root = TreeNode(root_val)
index = inorder.index(root_val) # 找到根节点在中序遍历中的位置
root.left = buildTree(inorder[:index], postorder) # 递归处理左子树
root.right = buildTree(inorder[index+1:], postorder) # 递归处理右子树
return root
# 示例
in_order = [4,2,5,1,3,6]
post_order = [4,5,2,6,3,1]
root = buildTree(in_order, post_order)
# 现在你可以调用 `levelOrderTraversal(root)` 来获取层序遍历结果
```
4. 二叉树遍历 【问题描述】 给定一棵n个节点的二叉树,输出其前序遍历,中序遍历,
当然可以。在计算机科学中,二叉树的遍历是指按照一定的顺序访问二叉树的所有节点。主要有三种基本遍历方式:
1. **前序遍历** (Preorder Traversal): 先访问根节点,然后递归地遍历左子树,最后遍历右子树。具体步骤是 `根 -> 左子树 -> 右子树`。
2. **中序遍历** (Inorder Traversal): 先递归地遍历左子树,然后访问根节点,最后遍历右子树。步骤是 `左子树 -> 根 -> 右子树`。对于排序好的二叉搜索树,这是按照值升序排列的方式。
3. **后序遍历** (Postorder Traversal): 先递归地遍历左子树和右子树,最后访问根节点。步骤是 `左子树 -> 右子树 -> 根`。
你可以用递归或迭代的方式来实现这三种遍历。递归比较简单直观,但是可能会导致大量的函数调用开销;而迭代则需要借助栈数据结构来辅助过程,通常更高效一些。
以下是使用Python的递归方法来实现二叉树的前序和中序遍历示例:
```python
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def preorder_traversal(root):
if root is not None:
print(root.val)
preorder_traversal(root.left)
preorder_traversal(root.right)
def inorder_traversal(root):
if root is not None:
inorder_traversal(root.left)
print(root.val)
inorder_traversal(root.right)
```
如果你有特定的二叉树实例想要遍历,告诉我具体的节点信息,我可以帮你演示如何操作。
阅读全文