二叉树中和为某一值得路径

路径为从根节点到叶节点一条路径,路径经过的各节点数值之和等于某一给定数值,则打印路径上的节点

因为需要打印满足条件的路径节点信息和各节点之和,需要栈记录经过的节点,和一个保存数值之和的变量
用前序遍历方法,可以首先访问节点,然后将节点入栈,并将数值和之前入栈的节点值相加
如果当前之和否满足给定值,判断当前节点是否叶节点,是则打印路径信息
判断节点左右孩子是否为空,递归调用
在调用完,返回时要将入栈的值出栈(此时栈中节点只到父节点),和变量也要变回调用之前的状态

class Btree {  
        int value;  
        Btree leftBtree;  
        Btree rightBtree;  
    }  
    private Stack<Integer> stack = new Stack<Integer>();   
    public void FindPath(Btree node , int sum,int currSum){  
        boolean isLeaf;  
        if(node == null)  
            return;  
        currSum += node.value;  
        stack.push(node.value);  
        isLeaf = node.leftBtree == null && node.rightBtree == null;  
        if(currSum == sum && isLeaf){  
            System.out.println("Path:");  
            for(int val : stack){  
                System.out.println(val);  
            }  
        }  
        if(node.leftBtree != null)  
            FindPath(node.leftBtree, sum, currSum);  
        if(node.rightBtree != null)  
            FindPath(node.rightBtree, sum, currSum);  
        currSum -= node.value;  
        stack.pop();  
    }  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值