Topic
- Tree
- Depth-first Search
- Breadth-first Search
- Recursion
- Queue
Description
https://leetcode.com/problems/binary-tree-right-side-view/
Given the root
of a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
Example 1:
Input: root = [1,2,3,null,5,null,4]
Output: [1,3,4]
Example 2:
Input: root = [1,null,3]
Output: [1,3]
Example 3:
Input: root = []
Output: []
Constraints:
- The number of nodes in the tree is in the range
[0, 100]
. -100 <= Node.val <= 100
Analysis
方法一:DFS
方法二:BFS
Submission
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import com.lun.util.BinaryTree.TreeNode;
public class BinaryTreeRightSideView {
//方法一:DFS
public List<Integer> rightSideView(TreeNode root) {
List<Integer> result = new ArrayList<>();
rightSideView(root, result, 0);
return result;
}
private void rightSideView(TreeNode node, List<Integer> result, int level) {
if(node == null) return;
if(level == result.size())
result.add(node.val);
rightSideView(node.right, result, level + 1);
rightSideView(node.left, result, level + 1);
}
//方法二:BFS
public List<Integer> rightSideView2(TreeNode root) {
List<Integer> result = new ArrayList<>();
LinkedList<TreeNode> queue = new LinkedList<>();
if(root == null) return result;
queue.offer(root);
while(!queue.isEmpty()) {
result.add(queue.peek().val);
for(int size = queue.size(); size > 0; size--) {
TreeNode node = queue.poll();
if(node.right != null)
queue.offer(node.right);
if(node.left != null)
queue.offer(node.left);
}
}
return result;
}
}
Test
import static org.junit.Assert.*;
import org.hamcrest.collection.IsEmptyCollection;
import org.hamcrest.collection.IsIterableContainingInOrder;
import org.junit.Test;
import com.lun.util.BinaryTree;
public class BinaryTreeRightSideViewTest {
@Test
public void test() {
BinaryTreeRightSideView obj = new BinaryTreeRightSideView();
assertThat(obj.rightSideView(BinaryTree.integers2BinaryTree(1, 2, 3, null, 5, null, 4)), //
IsIterableContainingInOrder.contains(1, 3, 4));
assertThat(obj.rightSideView(BinaryTree.integers2BinaryTree(1, null, 3)), //
IsIterableContainingInOrder.contains(1, 3));
assertThat(obj.rightSideView(null), IsEmptyCollection.empty());
}
@Test
public void test2() {
BinaryTreeRightSideView obj = new BinaryTreeRightSideView();
assertThat(obj.rightSideView2(BinaryTree.integers2BinaryTree(1, 2, 3, null, 5, null, 4)), //
IsIterableContainingInOrder.contains(1, 3, 4));
assertThat(obj.rightSideView2(BinaryTree.integers2BinaryTree(1, null, 3)), //
IsIterableContainingInOrder.contains(1,3));
assertThat(obj.rightSideView2(null), IsEmptyCollection.empty());
}
}