算法-树-二叉树的右视图

在这里插入图片描述

方法一 BFS

使用二叉树层序遍历的思想 并用size来记录每一层的节点个数,当size==1时就是每一层的最后一个

/**
 * Definition for a binary tree node.
 * public 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;
 *     }
 * }
 */
class Solution {
    
    
    public List<Integer> rightSideView(TreeNode root) {
    
    
        List<Integer> list = new ArrayList<Integer>();
        if(root == null) {
    
    
            return list;
        }

        Queue<TreeNode> queue = new LinkedList<>();

        queue.offer(root);
        
        while(!queue.isEmpty()) {
    
    
            int size = queue.size();
            //保存某一层的节点个数
            while(size > 0) {
    
    
                if(size == 1) {
    
    
                    //说明到某一层的最右边了
                    list.add(queue.peek().val);
                }
                TreeNode cur = queue.poll();
                size--;

                if(cur.left != null) {
    
    
                    queue.offer(cur.left);
                }

                if(cur.right != null) {
    
    
                    queue.offer(cur.right);
                }
            }

            

        }
        return list;
    }
}

方法二 DFS

在这里插入图片描述
设置depth是为了只把最右边的节点加入集合 否则就是全树遍历加入集合

/**
 * Definition for a binary tree node.
 * public 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;
 *     }
 * }
 */
class Solution {
    
    
    List<Integer> list = new ArrayList<>();
    public List<Integer> rightSideView(TreeNode root) {
    
    
        if(root == null) {
    
    
            return list;
        }

        dfs(root, 0);
        return list;
    }

    public void dfs(TreeNode root, int depth) {
    
    
        if(root == null) {
    
    
            return;
        }
        if(list.size() == depth) {
    
    
            list.add(root.val);
        }
        //每进入一次递归  深度加一
        depth++;
        dfs(root.right, depth);
        dfs(root.left, depth);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45100361/article/details/113480032
今日推荐