【剑指offer】之二叉树中和为某一值的路径

来源:互联网 发布:mysql语句执行顺序 编辑:程序博客网 时间:2024/05/09 13:00
题目描述:

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

分析:

       先序遍历,利用栈来保存所经过的路径节点,如果访问到叶子节点所得到的和等于整数的值,输出整条路径,否则出栈当前叶子节点或或节点,递归访问其他子树。(findPath函数实现)

java代码实现:

public class SortedBinTree<T extends Comparable> {static class Node {Object data ;Node parent ;Node left ;Node right ;public Node(Object data, Node parent, Node left, Node right) {super();this.data = data;this.parent = parent;this.left = left;this.right = right;}@Overridepublic String toString() {return "data[" + data + "]";}}private Node root ;public SortedBinTree() {root = null;}public Node getRoot() {return root ;}public SortedBinTree(int o) {root = new Node(o, null,null,null);}public void add(T ele) {if(root == null) {root = new Node(ele, null,null,null);} else {Node current = root ;Node parent = null ;int cmp = 0;do {parent = current ;cmp = ele.compareTo(current.data);if(cmp > 0) {//if(ele > current.data) {current = current.right;} else {current = current.left;}} while(current != null);Node newNode = new Node(ele,parent,null,null);if(cmp > 0) {parent.right = newNode ;} else {parent.left = newNode ;}}}public void findPath(Node root, int sum) {if(root == null)return ;Stack stack = new Stack();int currentSum = 0;findPath(root, sum, currentSum,stack);}public void findPath(Node root, int sum, int currentSum, Stack stack) {currentSum += (Integer) root.data;stack.push(root);if(root.left==null && root.right==null && currentSum==sum) {Iterator iterator = stack.iterator();while(iterator.hasNext()) {System.out.print(iterator.next());}System.out.print(" ");return ; }         if(root.left != null)findPath(root.left, sum,currentSum,stack);if(root.right != null)findPath(root.right,sum,currentSum,stack);currentSum -= (Integer) root.data;stack.pop();}}


0 0
原创粉丝点击