剑指offer-20200304

20200304

题目 :栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。

思路 :新建一个栈,首先把压栈的元素按顺序压入,当栈顶元素和出栈的第一个元素相同时,将该压栈的元素弹出,出栈列表指针向后移动并继续判断;最后判断出栈列表指针是否指向出栈列表的末尾。

code

public boolean validateStackSequences(int[] pushed, int[] popped){
    Stack<Integer> stack = new Stack<>();
    int j = 0;
    for(int elem : pushed){
        stack.push(elem);
        while(j < popped.length && !stack.isEmpty() && stack.peek == popped[j]){
            stack.pop();
            j++;
        }
    }
    return j == popped.length;
}

题目 :从上到下打印二叉树

从上到下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

例如:
给定二叉树: [3,9,20,null,null,15,7],

	3
   / \
  9  20
    /  \
   15   7
返回:

[3,9,20,15,7]

思路 :层次遍历

code

class Solution{
    public int[] levelOrder(TreeNode root){
        ArrayList<Integer> list = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        if(root == null) return new int[]{};
        queue.offer(root);
        while(!queue.isEmpty()){
            TreeNode node = queue.poll();
            list.add(node.val);
            if(node.left != null) queue.offer(node.left);
            if(node.right != null) queue.offer(node.right);
        }
        int[] res = new int[list.size()];
        for(int i=0;i<list.size();i++){
            res[i] = list.get(i);
        }
        return res;
    }
}

题目 :从上到下打印二叉树||

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

code

class Solution{
    public List<List<Integer>> levelOrder(TreeNode root){
        List<List<Integer>> resList = new ArrayList<>();
        if(root == null) return resList;
        List<Integer> innerList = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            for(int i = 0;i < size;i++){
                TreeNode node = queue.poll();
                innerList.add(node.val);
                if(node.left != null){
                    queue.offer(node.left);
                }
                if(node.right != null){
                    queue.offer(node.right);
                }
            }
            resList.add(new ArrayList<>(innerList));
            innerList.clear();
        }
        return resList;
    }
}
发布了94 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_31900497/article/details/104649409