94. 二叉树的中序遍历
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [1] 输出:[1]
提示:
[0, 100]
内-100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
相似题目
原站题解
cpp 解法, 执行用时: 0 ms, 内存消耗: 8.4 MB, 提交时间: 2023-11-17 17:42:14
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: void inorder(TreeNode* root, vector<int>& res) { if (!root) { return; } inorder(root->left, res); res.push_back(root->val); inorder(root->right, res); } vector<int> inorderTraversal(TreeNode* root) { vector<int> res; inorder(root, res); return res; } }; // 迭代 class Solution2 { public: vector<int> inorderTraversal(TreeNode* root) { vector<int> res; stack<TreeNode*> stk; while (root != nullptr || !stk.empty()) { while (root != nullptr) { stk.push(root); root = root->left; } root = stk.top(); stk.pop(); res.push_back(root->val); root = root->right; } return res; } };
java 解法, 执行用时: 0 ms, 内存消耗: 40 MB, 提交时间: 2023-11-17 17:41:46
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); Deque<TreeNode> stk = new LinkedList<TreeNode>(); while (root != null || !stk.isEmpty()) { while (root != null) { stk.push(root); root = root.left; } root = stk.pop(); res.add(root.val); root = root.right; } return res; } } // 中序遍历,递归 class Solution2 { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); inorder(root, res); return res; } public void inorder(TreeNode root, List<Integer> res) { if (root == null) { return; } inorder(root.left, res); res.add(root.val); inorder(root.right, res); } }
golang 解法, 执行用时: 4 ms, 内存消耗: 1.9 MB, 提交时间: 2023-11-17 17:41:09
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func inorderTraversal(root *TreeNode) (res []int) { stack := []*TreeNode{} for root != nil || len(stack) > 0 { for root != nil { stack = append(stack, root) root = root.Left } root = stack[len(stack)-1] stack = stack[:len(stack)-1] res = append(res, root.Val) root = root.Right } return }
php 解法, 执行用时: 0 ms, 内存消耗: 18.8 MB, 提交时间: 2023-11-17 17:40:09
/** * Definition for a binary tree node. * class TreeNode { * public $val = null; * public $left = null; * public $right = null; * function __construct($val = 0, $left = null, $right = null) { * $this->val = $val; * $this->left = $left; * $this->right = $right; * } * } */ class Solution { public $res = []; /** * @param TreeNode $root * @return Integer[] */ function inorderTraversal($root) { $res = []; if ( $root == null ) return $res; $stack = []; while ( !empty($stack) or $root != null ) { if ( $root != null ) { $stack[] = $root; $root = $root->left; } else { $root = array_pop($stack); $res[] = $root->val; $root = $root->right; } } return $res; } }
php 解法, 执行用时: 8 ms, 内存消耗: 18.9 MB, 提交时间: 2023-11-17 17:37:18
/** * Definition for a binary tree node. * class TreeNode { * public $val = null; * public $left = null; * public $right = null; * function __construct($val = 0, $left = null, $right = null) { * $this->val = $val; * $this->left = $left; * $this->right = $right; * } * } */ class Solution { public $res = []; /** * @param TreeNode $root * @return Integer[] */ function inorderTraversal($root) { if ( $root != null ) { $this->inorderTraversal($root->left); $this->res[] = $root->val; $this->inorderTraversal($root->right); } return $this->res; } }
golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2021-07-22 10:10:58
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func inorderTraversal(root *TreeNode) (ans []int) { var dfs func(*TreeNode) dfs = func(node *TreeNode) { if node != nil { dfs(node.Left) ans = append(ans, node.Val) dfs(node.Right) } } dfs(root) return ans }
python3 解法, 执行用时: 44 ms, 内存消耗: N/A, 提交时间: 2018-08-30 00:19:12
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def inorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ res = [] if root == None: return res stack = [] while stack or root: if root: stack.append(root) root = root.left else: root = stack.pop() res.append(root.val) root = root.right return res
python3 解法, 执行用时: 44 ms, 内存消耗: N/A, 提交时间: 2018-08-30 00:07:04
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def __init__(self): self.res = [] def inorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ if root: self.inorderTraversal(root.left) self.res.append(root.val) self.inorderTraversal(root.right) return self.res