94. 二叉树的中序遍历
题目来源:94. 二叉树的中序遍历
给定一个二叉树的根节点 root
,返回它的 中序 遍历。
/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } */ /** * @param {TreeNode} root * @return {number[]} */ var inorderTraversal = function(root) { if(root == null){ return []; } let cur = root; let res = []; while(cur){ if(cur.left == null){ res.push(cur.val); cur = cur.right; }else{ let node = cur.left; while(node != null && node.right != null && node.right != cur){ node = node.right; } if(node.right == null){ node.right = cur; cur = cur.left; }else{ node.right = null; res.push(cur.val) cur = cur.right } } } return res; };
示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [1] 输出:[1]
示例 4:
输入:root = [1,2] 输出:[2,1]
示例 5:
输入:root = [1,null,2] 输出:[1,2]
Python3
from typing import List # Definition for a binary tree node. 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: TreeNode) -> List[int]: def inorder(node: TreeNode): if not node: return inorder(node.left) res.append(node.val) inorder(node.right) res = list() inorder(root) return res class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: res = list() if not root: return res stack = list() node = root while not stack or node: while node: stack.append(node) node = node.left node = stack.pop() res.append(node.val) node = node.right return res class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: res = list() if not root: return res node = root while node: cur = node.left if cur: while cur.right and cur.right is not node: cur = cur.right if not cur.right: cur.right = node node = node.left continue else: res.append(node.val) cur.right = None else: res.append(node.val) node = node.right return res
提示:
- 树中节点数目在范围
[0, 100]
内 -100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?