94-二叉树中序遍历

Posted lzh1043060917

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了94-二叉树中序遍历相关的知识,希望对你有一定的参考价值。

技术图片

 

 思路:中序遍历,就是按照“左,中,右”的顺序遍历一个二叉树。

1.递归,先递归左子树,之后把根节点放进res里,在递归右节点即可,可以把res设置为全局变量,或者再写一个函数,res当成参数传递都可以。代码如下,比较简单。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List < Integer > inorderTraversal(TreeNode root) {
        List < Integer > res = new ArrayList < > ();
        helper(root, res);
        return res;
    }

    public void helper(TreeNode root, List < Integer > res) {
        if (root != null) {
            if (root.left != null) {
                helper(root.left, res);
            }
            res.add(root.val);
            if (root.right != null) {
                helper(root.right, res);
            }
        }
    }
}

  2.不递归,可以用一个栈,如果根节点不为null,就把根节点入栈,然后指针指向左子节点(可以设置一个cur=root,移动cur,而不是直接移动root),假如根节点等于null,就出栈,把出栈的元素设置为cur,res.add(cur.val),之后,cur指向cur的右节点。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List < Integer > inorderTraversal(TreeNode root) {
      List<Integer> res=new ArrayList<>();
      Stack<TreeNode> stack=new Stack<>();
      TreeNode cur=root;
      while(cur!=null||!stack.isEmpty())
      {
          if(cur!=null)
          {
            stack.push(cur);
            cur=cur.left;
          }
          else
          {
              cur=stack.pop();
              res.add(cur.val);
              cur=cur.right;
          }
          

          
          
      }
      return res;
    }

  
}

  

以上是关于94-二叉树中序遍历的主要内容,如果未能解决你的问题,请参考以下文章

二叉树中序遍历

算法: 二叉树中序遍历94. Binary Tree Inorder Traversal

leetCode 94.Binary Tree Inorder Traversal(二叉树中序遍历) 解题思路和方法

Leetcode 94. 二叉树的中序遍历

每日一扣94. 二叉树的中序遍历

LeetCode 94 ——二叉树的中序遍历