给定一个二叉树,返回它的中序 遍历。
示例:
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
个人解答
方法一:递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
var inorderTraversal = function(root) { const res = [] traversal(root, res) return res }; function traversal (root, res) { if (root) { if (root.left) { traversal(root.left, res) } res.push(root.val) if (root.right) { traversal(root.right, res) } } }
|
方法而:栈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| var inorderTraversal = function(root) { var res = [] var stack = [] while (root || stack.length) { if (root.left) { stack.push(root) root = root.left } else if (!root.left && !root.right) { res.push(root.val) root = stack.pop() root && (root.left = null) } else if (root.right) { res.push(root.val) root = root.right } } return res }
|
解题思路
前序遍历:先输出根节点,在依次前序遍历左子树和右子树;
中序遍历:先中序遍历左子树,在输出根节点,最后中序遍历右子树;
后序遍历:先后序遍历左子树,接着后序遍历右子树,最后输出根节点。
输出
前序遍历:1,2,4,5,3,6,7;
中序遍历:4,2,5,1,3,7,6
后序遍历:4,5,2,7,6,3,1