力扣简94 二叉树的中序遍历++

直接看的题解,但是这种递归法有点慢。

 

ArrayList 泛型 https://www.cnblogs.com/lwbqqyumidi/p/3837629.html

 

 

package leetcode01;

/*如果你的代码中写了   List<Student> stuList = new ArrayList<Student>();
 * 系统可能默认给你导入  import java.swt.*;包。此时需要将这个包改为   import java.util.*;因为List是属于util包*/
import java.util.List; 
import java.util.ArrayList;
import java.util.LinkedList;

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;
     }
}

public class Solution94 {
//写list这个容器就不会用,而且也没啥思路,看到树心里就发怵,所以直接看了题解。    
    public static List<Integer> inorderTraversal(TreeNode root) {

        List<Integer> res = new ArrayList<Integer>();
        inorder(root, res);
        return res;
    }
    
    public static void inorder(TreeNode head,List<Integer> res) {
        if(head==null) {
            return;
        }
        else{
            inorder(head.left, res);
            res.add(head.val);
            inorder(head.right, res);
        }      
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TreeNode root=new TreeNode(1,null,new TreeNode(2,new TreeNode(3),null));
        System.out.println(inorderTraversal(root));
    }

}
//迭代 题解2
    public static List<Integer> inorderTraversal(TreeNode root) {
    
        List<Integer> res = new ArrayList<Integer>();
        System.out.println(res);
        Deque<TreeNode> stk=new LinkedList<TreeNode>();
        if(root==null) {
            return res;
        }   
        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;
    }

题解3 就看了一下,像穿针引线法。

 

//这看了答案也写不出来哇 先放在这 有问题 多看看吧没办法   

   public static List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); TreeNode predecessor = null; while (root != null) { if (root.left != null) { // predecessor 节点就是当前 root 节点向左走一步,然后一直向右走至无法走为止 predecessor = root.left; while (predecessor.right != null && predecessor.right != root) { predecessor = predecessor.right; } // 让 predecessor 的右指针指向 root,继续遍历左子树

 

posted @ 2022-05-17 11:35  Ssshiny  阅读(26)  评论(0)    收藏  举报