leetcode_199:Binary Tree Right Side View

这个题目其实没啥说的,就是层次遍历,每次都取那一层的最后一个就行。只是编码过程中有一些边界条件需要注意,再有就是这种需要保存上一层状态的题目,一般是需要两个队列的,来轮流保存每层的节点,代码如下:

    public List<Integer> rightSideView(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        if (root == null)
            return result;
        if (root.left == null && root.right == null) {
            result.add(root.val);
            return result;
        }
        Queue<TreeNode> queue1 = new LinkedList<>();
        Queue<TreeNode> queue2 = new LinkedList<>();
        //先将根节点加入到队列中
        queue1.add(root);
        while (!queue1.isEmpty() || !queue2.isEmpty()) {
            TreeNode finalCur = null;	//记录一层最后的节点
            while (!queue1.isEmpty()) {
                TreeNode curNode = queue1.remove();
                if (curNode.left != null)
                    queue2.add(curNode.left);
                if (curNode.right != null)
                    queue2.add(curNode.right);
                finalCur = curNode;
            }
            //如果finalCur不为空说明queue1保存的那层遍历了,所以要取出那一层最后一个
            if (finalCur != null)
                result.add(finalCur.val);
            //重置,让它在queue2中继续寻找最后一个
            finalCur = null;
            while (!queue2.isEmpty()) {
                TreeNode curNode = queue2.remove();
                if (curNode.left != null)
                    queue1.add(curNode.left);
                if (curNode.right != null)
                    queue1.add(curNode.right);
                finalCur = curNode;
            }
            //不为空说明queue2保存的那层也遍历了,取出那一层最后一个
            if (finalCur != null)
                result.add(finalCur.val);
        }
        return result;
    }
发布了96 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/reachwang/article/details/103319163