给你二叉树的根节点 root ,返回它节点值的中序遍历
发布人:shili8
发布时间:2024-12-29 17:11
阅读次数:0
**二叉树的中序遍历**
在计算机科学中,二叉树是一种常见的数据结构,它由一系列结点组成,每个结点最多有两个子结点:左孩子和右孩子。二叉树的中序遍历是指按照从最小值到最大值的顺序访问每个结点。
**定义**
给定一个二叉树的根节点 `root`,返回它节点值的中序遍历。
**示例**
例如,我们有如下二叉树:
4 / 25 / 136
中序遍历结果为:`[1,2,3,4,5,6]`。
**解决方案**
我们可以使用递归或迭代的方式来实现中序遍历。下面是递归版的代码:
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Nonedef inorderTraversal(root): """ :type root: TreeNode :rtype: List[int] """ res = [] if not root: return res # 递归左子树 left_res = inorderTraversal(root.left) # 中序遍历当前结点 res.append(root.val) # 递归右子树 right_res = inorderTraversal(root.right) return left_res + res + right_res# 测试用例root = TreeNode(4) root.left = TreeNode(2) root.right = TreeNode(5) root.left.left = TreeNode(1) root.left.right = TreeNode(3) root.right.right = TreeNode(6) print(inorderTraversal(root)) # [1,2,3,4,5,6]
**迭代版**
我们也可以使用栈来实现中序遍历。下面是迭代版的代码:
def inorderTraversal(root): """ :type root: TreeNode :rtype: List[int] """ res = [] stack = [] while True: # 进入左子树 while root: stack.append(root) root = root.left # 中序遍历当前结点 if not stack: return res node = stack.pop() res.append(node.val) # 进入右子树 root = node.right return res# 测试用例root = TreeNode(4) root.left = TreeNode(2) root.right = TreeNode(5) root.left.left = TreeNode(1) root.left.right = TreeNode(3) root.right.right = TreeNode(6) print(inorderTraversal(root)) # [1,2,3,4,5,6]
**总结**
中序遍历是二叉树的一种常见操作,通过递归或迭代的方式可以实现。上述代码提供了两个版本的中序遍历函数,分别使用递归和栈来实现。