Sum Root to Leaf Numbers
Given a binary tree containing digits from 0-9
only, each root-to-leaf path
could represent a number.
An example is the root-to-leaf path 1->2->3
which represents the number 123
.
解题思想:二叉树遍历,判断如果是叶子节点,就把路径的节点转换为整数。这里面我用了二个栈
stack用于返回上个节点
stack1用于记录每次根节点到叶子的所有节点,stack1中节点和stack一样添加节点,但是弹出的时机不一样。要注重分析。
<span style="color:#333333;"> public int sumNumbers(TreeNode root) { if(root==null)return 0; Stack<TreeNode> stack=new Stack<TreeNode>(); Stack<TreeNode> stack1=new Stack<TreeNode>(); StringBuilder builder=new StringBuilder(); int sum=0; TreeNode current=root; while(current!=null||!stack.isEmpty()) { if(current!=null) { stack.push(current); stack1.push(current); current=current.left; }else{ current=stack.pop(); if(current.right==null&¤t.left==null) { for(int i=0;i<stack1.size();i++) { builder.append(stack1.get(i).val); } sum+=Integer.parseInt(builder.toString()); builder.delete(0, builder.length()); </span><span style="color:#ff0000;">stack1.pop();//叶子节点计算完弹出</span><span style="color:#333333;"> }else{ </span><span style="color:#ff0000;">while(!stack1.isEmpty()) { if(stack1.peek()==current)break;//当current存在右节点时stack中的current的节点已经弹出 stack1.pop(); //但是stack1中的current节点不能弹出,我们要保持路径上的完整节点 }</span><span style="color:#333333;"> } current=current.right; } } return sum; }</span>
时间: 2024-10-27 11:09:26