二叉树-由底层到顶层的层序遍历java实现

思路一:用栈存储层序,再按序输出

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
import java.util.*;
public class Solution {
    public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
        ArrayList<ArrayList<Integer>> List1=new ArrayList<ArrayList<Integer>>();
        if(root==null)
            return List1;
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        Stack<ArrayList<Integer>> stack=new Stack<ArrayList<Integer>>();
        queue.add(root);
        while(!queue.isEmpty()){
            ArrayList<Integer> list1=new ArrayList<Integer>();
            int count=queue.size();
            while(count>0){
                TreeNode temp=queue.poll();
                list1.add(temp.val);
                if(temp.left!=null)
                    queue.add(temp.left);
                if(temp.right!=null)
                    queue.add(temp.right);
                count--;
            }
            stack.add(list1);
        }
        while(!stack.empty()){
            List1.add(stack.pop());
        }
        return List1;
    }
}

思路二:递归思想,先进行递归后输出

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
import java.util.*;
public class Solution {
    ArrayList<ArrayList<Integer>> List1=new ArrayList<ArrayList<Integer>>();
    public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
        if(root==null)
            return List1;
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        queue.add(root);
        bottom(queue);
        return List1;
    }
    public void bottom(Queue<TreeNode> queue){
        if(queue.isEmpty())
            return;
        int count=queue.size();
        ArrayList<Integer> list1=new ArrayList<Integer>();
        while(count>0){
            TreeNode temp=queue.poll();
            list1.add(temp.val);
            if(temp.left!=null)
                queue.add(temp.left);
            if(temp.right!=null)
                queue.add(temp.right);
            count--;
        }
        bottom(queue);
        List1.add(new ArrayList<Integer> (list1));
    }
}
发布了32 篇原创文章 · 获赞 1 · 访问量 361

猜你喜欢

转载自blog.csdn.net/zy854816286/article/details/104700547