字节跳动面试算法题——二叉树的右视图

题目

给定一个二叉树,按照自上而下的顺序,返回从右侧所能看到的所有节点值。
下图展示了一个二叉树右视图,返回结果是:1,3,7
字节跳动面试算法题——二叉树的右视图_第1张图片

分析

  • 遍历二叉树
    • 广度优先遍历(BFS)
    • 深度优先遍历(DFS)
  • 按照规则保存对应的节点值
  • 返回右视图的所有节点值

题解

BFS遍历二叉树,保存每层的最右节点值,返回二叉树的右视图​

  public class BTreeSideView {
  public List<Integer> rightSideView(TreeNode root) {
    List<Integer> res = new ArrayList<>();
    if (root == null) return res;
    // 使用队列实现层序遍历
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root);
    while (!queue.isEmpty()) {
      // 保存每层最右节点
      TreeNode rightNode = null;
      // 每个for循环遍历一层节点
      int size = queue.size();
      for (int i = 0; i < size; i++) {
        TreeNode node = queue.poll();
        rightNode = node;
        if (node.left != null) queue.offer(node.left);
        if (node.right != null) queue.offer(node.right);
      }
      // 将每层最右节点数值保存到结果中
      res.add(rightNode.val);
    }
    return res;
  }
}

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

总结

本题的解题思路是遍历树,找到对应规则下的节点值并返回。按照此思路同样可以解决“二叉树的左视图”、“n叉树的左/右视图”等问题,感兴趣的读者可以自行练习

你可能感兴趣的:(算法,面试,算法,面试,阿里巴巴,字节跳动,二叉树)