1. 题目描述

给定一个二叉树,返回它的中序 遍历。

示例:

  1. 输入: [1,null,2,3]
  2. 1
  3. \
  4. 2
  5. /
  6. 3

输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

2. 实现思路

迭代实现:初始化一个栈和结果数组,当栈不为空时,重复下面的步骤:
(1)将根节点和所有的左子节点放入栈中,直到没有左子节点
(2)栈顶元素出栈,存入结果数组,将出栈的元素作为根节点
(3)查看该根节点右子节点是否有左子节点,若有就入栈,否则继续出栈

3. 代码实现

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @return {number[]}
  11. */
  12. var inorderTraversal = function(root) {
  13. if(!root){
  14. return [];
  15. }
  16. var result = []
  17. var stack = []
  18. while(stack.length!==0||root){
  19. while(root){
  20. stack.push(root);
  21. root = root.left;
  22. }
  23. root = stack.pop();
  24. result.push(root.val)
  25. root = root.right;
  26. }
  27. return result;
  28. };

4. 提交结果

94. 二叉树的中序遍历 - 图1