力扣简1022 从根到叶的二进制之和 20220530每日一题 看题解

咱就是说看了一眼人家的代码怎么那么少哇!!!想下班了,明天再看!

 

自己写的 写了快花了我一个小时 自己就是常规思路毫无优化 代码量也很多 所以运行肯定很慢

 1 package leetcode01;
 2 /*给出一棵二叉树,其上每个结点的值都是0或1。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。
 3 例如,如果路径为0->1->1->0->1,那么它表示二进制数01101,也就是13。
 4 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。返回这些数字之和。题目数据保证答案是一个 32位整数。*/
 5 import java.util.Deque;
 6 import java.util.LinkedList;
 7 
 8 
 9 public class Solution1022 {
10     public static int sumRootToLeaf(TreeNode root) {
11         int result=0;
12         Deque<Integer> stack=new LinkedList<Integer>();
13         result=traverse(root,stack,result);
14         return result;
15     }
16     
17     public static int caculate(Deque<Integer> stack) {
18         int res=0;
19         Deque<Integer> caculatestack=new LinkedList<Integer>(stack);
20         while(!caculatestack.isEmpty()) {
21             int size=caculatestack.size();
22             for(int i=0;i<size;i++) {
23                 int element=caculatestack.pop();
24                 res=res+element*(int)(Math.pow(2,i));
25             }
26         }
27         return res;
28     }
29     
30     public static int traverse(TreeNode root,Deque<Integer> stack,int result) {
31         boolean leftVisited=false;
32         boolean rightvisited=false;
33         if(root==null) {
34             return 0;
35         }
36         else if(root!=null){
37             stack.push(root.val);
38             if(root.left!=null) {
39                 result=traverse(root.left,stack,result);
40                 leftVisited=true;
41             }
42             if(root.right!=null) {
43                 result=traverse(root.right,stack,result);
44                 rightvisited=true;
45             }
46             if(leftVisited||rightvisited) {
47                 stack.poll();//最开始没写这个判断 会导致除了根节点都出不了栈
48             }
49             if(root.right==null&&root.left==null) {
50                 result=result+caculate(stack);
51                 stack.poll();
52             }
53         }
54         return result;
55     }
56     
57     public static void main(String[] args) {
58         // TODO Auto-generated method stub
59         TreeNode root=new TreeNode(1,new TreeNode(0,new TreeNode(0),new TreeNode(1)),new TreeNode(1,new TreeNode(0),new TreeNode(1)));
60         System.out.print(sumRootToLeaf(root));
61     }
62 
63 }

 

posted @ 2022-05-30 18:11  Ssshiny  阅读(32)  评论(0)    收藏  举报