二叉树查找x的祖先

来源:互联网 发布:递推算法求韩信点兵 编辑:程序博客网 时间:2024/04/25 16:24
package edu.lnu.fang.BiTree;import java.util.Iterator;import java.util.Stack;import edu.lnu.fang.BiTree.BinTreeTra.Node;public class SearchAncestor {    static void printS(Stack S) {        Iterator<Node> iterator = S.iterator();        while (iterator.hasNext()) {            System.out.print(iterator.next().data + " ");        }    }/** * 寻找值为x(假设只有一个值为x的节点)的节点的所有祖先 * @param root * @param x */    static void search(Node root, int x) {        Stack<Node> S = new Stack<Node>();        Node p = root;        Node r = null;        while (p != null || S.size() > 0) {            if (p != null) {                S.add(p);                p = p.leftChild;            } else {                p = S.peek();                if (p.rightChild != null && p.rightChild != r) {                    p = p.rightChild;                    S.add(p);                    p = p.leftChild;                } else {                    p = S.pop();                    if(p.data==x){                        printS(S);                        return;                    }                    //BinTreeTra.printNode(p);                    r = p;                    p = null;                }            }        }    }    public static void main(String[] args) {        Node root = BinTreeTra.init();        search(root,16);    }}
0 0
原创粉丝点击