数据结构-03

来源:互联网 发布:林彪军事才能 知乎 编辑:程序博客网 时间:2024/06/08 06:27

题目:在二元树中找出和为某一值的所有路径

输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
图片示例
个人算法思路:
利用递归算法把二元树和输入的整数作为参数传递,
并利用堆栈和出栈记录遍历的路径。

算法实现
(注:在算法中使用了LinkedList类来实现一个栈操作)

public static void allPath(Node treeNode,int data){    if(treeNode!=null){        //节点不为空 节点入栈        qu.push(treeNode);        //将传入的整数值减去节点的值        data=data-treeNode.data;        //如果运算后的值大于零  继续递归        if(data>0){            //左孩子不为空 对左孩子进行递归            if(treeNode.leftChild!=null){                allPath(treeNode.leftChild,data);            }            //右孩子不为空 对左孩子进行递归            if(treeNode.rightChild!=null){                allPath(treeNode.rightChild,data);            }        }else if(data==0){            //如果运算后的值等于零 打印栈中所有元素            for(Node n:qu){                //打印的结果就是符合题意的一条路径                n.paintNode();            }        }//data判断结束        //当值data判断结束  弹出栈顶元素         qu.pop();    }//最外层判断结束}//函数结束

每天学习一点点 未来爱你多一点

原创粉丝点击