首页 > 代码库 > leetcode 199 :Binary Tree Right Side View
leetcode 199 :Binary Tree Right Side View
1 // 我的代码 2 package Leetcode; 3 /** 4 * 199. Binary Tree Right Side View 5 * address: https://leetcode.com/problems/binary-tree-right-side-view/ 6 * Given a binary tree, imagine yourself standing on the right side of it, 7 * return the values of the nodes you can see ordered from top to bottom. 8 * 9 */ 10 import java.util.*; 11 12 public class BinaryTreeRightSideView { 13 public static void main(String[] args) { 14 TreeNode[] tree = new TreeNode[9]; 15 for (int i = 1; i < 9; i++){ 16 tree[i] = new TreeNode(i); 17 } 18 TreeNode.link(tree, 1, 2, 3); 19 TreeNode.link(tree, 2, 4, 5); 20 TreeNode.link(tree, 3, 6, -1); 21 TreeNode.link(tree, 5, 7, 8); 22 // 先序遍历 23 TreeNode.prePrint(tree[1]); 24 // solution 25 List<Integer> result = rightSideView(tree[1]); 26 System.out.println(result); 27 28 // solution2 29 List<Integer> result2 = rightSideView2(tree[1]); 30 System.out.println(result2); 31 32 } 33 /** 34 * 方法一:时间复杂度较高,需要 O(n),n为树中节点的个数 35 * @param root 36 * @return 37 */ 38 public static List<Integer> rightSideView(TreeNode root) { 39 List<Integer> result = new ArrayList<>(); 40 Queue<TreeNode> queue = new LinkedList<>(); 41 int childNum = 0; 42 if (root != null){ 43 queue.offer(root); 44 while(!queue.isEmpty()){ 45 TreeNode node = queue.poll(); 46 if(node.left!= null){ 47 queue.offer(node.left); 48 childNum++; 49 } 50 if (node.right != null) 51 { 52 queue.offer(node.right); 53 childNum++; 54 } 55 System.out.println("queue.size() = " + queue.size()); 56 if (childNum - queue.size() == 0){ 57 result.add(node.val); 58 childNum = 0; 59 } 60 } 61 } 62 63 return result; 64 65 }
1 /** 2 * 方法二 3 * 别人家的解法,巧妙,速度快且好理解 4 * @param root 5 * 中右左 深度优先遍历,保存每层的第一个节点。用当前结果表的size作为标识,这样保证每次存的节点都是第一次出现在该层的节点 6 * @return 7 */ 8 public static List<Integer> rightSideView2(TreeNode root) { 9 List<Integer> res = new ArrayList<Integer>(); 10 if (root == null){ 11 return res; 12 } 13 dfs (root, res, 0); 14 return res; 15 } 16 17 public static void dfs (TreeNode root, List<Integer> res, int level){ 18 if (root == null){ 19 return; 20 } 21 if (res.size() == level){ 22 res.add (root.val); 23 } 24 if (root.right != null){ 25 dfs (root.right, res, level + 1); 26 } 27 if (root.left != null){ 28 dfs (root.left, res, level + 1); 29 } 30 }
leetcode 199 :Binary Tree Right Side View
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。