二叉树中找寻 节点和 为某个值的路径

来源:互联网 发布:h3c端口镜像配置 编辑:程序博客网 时间:2024/06/09 16:40

简述:

在一棵二叉树中,找寻节点和为某个值的路径


树如图,



过程:

在BinaryNode类中声明一个sum 用来记录当前遍历的总结点的和,path用来记录节点

注意的是在遍历完一个节点之后回溯时,有退出步骤,需要将sum减去遍历的那个节点,同时从现有path中remove那个节点


代码:

package offer;import java.util.LinkedList;class BinaryNode{BinaryNode left;BinaryNode right;int value;BinaryNode(){left = null;right = null;}BinaryNode(int value){this.value = value;left = null;right = null;}private static int sum = 0;private static LinkedList<Integer> path = new LinkedList<Integer>();void PrintAllPathsEqualsSomeNumber(int num){path.add(value);sum += value;if(sum == num)System.out.println(path.toString());if(left != null){left.PrintAllPathsEqualsSomeNumber(num);sum -= left.value;path.remove(path.size() - 1);}if(right != null){right.PrintAllPathsEqualsSomeNumber(num);sum -= right.value;path.remove(path.size() - 1);}}}public class GetPathEqualSomeNumber {public static void main(String[] args) {/*******************build tree*********************************/BinaryNode root = new BinaryNode(4);root.left = new BinaryNode(2);root.left.left = new BinaryNode(1);root.left.right = new BinaryNode(3);root.left.right.left = new BinaryNode(6);root.right = new BinaryNode(6);    root.right.left = new BinaryNode(5);    root.right.right = new BinaryNode(7);    root.right.right.right = new BinaryNode(8);    root.PrintAllPathsEqualsSomeNumber(15);    /***************************************************************/}}

输出: