力扣简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 }

浙公网安备 33010602011771号