题目
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
思路
使用深度优先算法,找到每一层节点最右端的节点,加入到队列中。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> list = new LinkedList<>();
int num=0;//二叉树的深度
dfs(root, list, num);
return list;
}
private void dfs(TreeNode root, List<Integer> list, int num){
if(root==null){
return;
}
if(num==list.size()){//每层最先遍历到的即为最右侧的节点
list.add(root.val);
}
num++;
dfs(root.right, list, num);
dfs(root.left, list, num);
}
}
算法复杂度
- 时间复杂度:O(N), 因为需要遍历整个二叉树。
- 空间复杂度:O(N), 最坏情况下二叉树是一条链表,此时的空间复杂度是O(N)。