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一样添加节点,但是弹出的时机不一样。要注重分析。
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());
stack1.pop();//叶子节点计算完弹出</span><span style="color:#333333;">
}else{
while(!stack1.isEmpty())
{
if(stack1.peek()==current)break;//当current存在右节点时stack中的current的节点已经弹出
stack1.pop(); //但是stack1中的current节点不能弹出,我们要保持路径上的完整节点
}
}
current=current.right;
}
}
return sum;
}