带权二叉树路径所代表的所有整数和

package test;

import java.util.Arrays;





public class Test2 {
		
	
	static class Node{
		int value = -1;
		Node lnext = null;
		Node rnext = null;
		public Node(int i){
			value = i;
		}
		
		@Override
		public String toString() {
			return value+"";
		}
	}				
			
	static void solve(Node n){
		Node[] stack = new Node[100];	
		int sum = 0;
		int cur_sum = 0;
		int top = -1;
		do{
			while(n!=null){		
				top++;
				stack[top] = n;					
				cur_sum = cur_sum*10+n.value;
				n = n.lnext;
			}
			Node p = null;
			boolean flag = true;
			while(top>-1 && flag){
				n = stack[top];
				if(n.rnext==p){
					if(n.rnext==null && n.lnext==null){
						sum += cur_sum;									
					}
					top--;
					cur_sum = (cur_sum-n.value)/10;
					p = n;					
				}else{
					n = n.rnext;
					flag = false;
				}
			}
		}while(top>-1);
		System.out.println(sum);
	}
	
	public static void main(String[] args) {		
		Node root1 = new Node(1);
		Node n1 = new Node(2);
		Node n2 = new Node(4);
		root1.lnext = n1;
		root1.rnext = n2;		
		Node n3 = new Node(3);
		Node n4 = new Node(5);
		n1.lnext = n3;
		n1.rnext = n4;
		
		Node n5 = new Node(6);		
		Node n6 = new Node(7);
		n2.lnext = n5;
		n2.rnext = n6;
		
		//solve(root1,3);
		Node[] arr = new Node[10];
		solve(root1);
		//System.out.println(Arrays.toString(stack));
		//System.out.println(solve(root1,11).value);
		//System.out.println(solve(root1));
	}		
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值