leetcode 199 从右看二叉树

Posted hiyashinsu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 199 从右看二叉树相关的知识,希望对你有一定的参考价值。

面试的时候不会写,只写完了层次遍历,挂了,Orz。

 

思路:

1.层次遍历,bfs。

2.遇到新层的第一个节点才会添加新层。

3.每层从右往左遍历,则最右的始终是每层的第一个。

4.结合2,3。当需要添加新层时,将节点值添加进结果集。

 

用到的数据结构:

1.队列,这里用双向Deque。

2.线性表,存结果。

3.Map,记录节点对应的level。

 

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 class Solution {
11     public List<Integer> rightSideView(TreeNode root) {
12         Deque<TreeNode> dq = new ArrayDeque<TreeNode>();
13         List<Integer> ans = new ArrayList<Integer>();
14         Map<TreeNode, Integer> level = new HashMap<TreeNode, Integer>();
15         if (root != null){
16             dq.addLast(root);
17             level.put(root, 1);
18             ans.add(root.val);
19         }
20         while (!dq.isEmpty()) {
21             TreeNode top = dq.getFirst();
22             dq.removeFirst();
23             if (top.right != null) {
24                 dq.addLast(top.right);
25                 level.put(top.right, level.get(top) + 1);
26                 if (ans.size() < level.get(top) + 1) {
27                     ans.add(top.right.val);
28                 }
29             }
30             if (top.left != null) {
31                 dq.addLast(top.left);
32                 level.put(top.left, level.get(top) + 1);
33                 if (ans.size() < level.get(top) + 1) {
34                     ans.add(top.left.val);
35                 }
36             }
37         }
38         return ans;
39     }
40 }

 

以上是关于leetcode 199 从右看二叉树的主要内容,如果未能解决你的问题,请参考以下文章

leetcode199二叉树的右视图

leetcode 199 二叉树的右视图

leetcode.199二叉树的右视图

Leetcode-199. 二叉树的右视图

LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)

LeetCode——199. 二叉树的右视图