关于java:二叉树查找父节点和全部祖先节点

FYI

树形构造

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}

遍历的办法

@Test
public void test() {
    TreeNode root, TreeNode p;
    // TODO 初始化root, p;
    Stack<TreeNode> pParents = new Stack<>();
    getParents(root, p, pParents);
    // p的父节点以及全副先人节点都寄存在pParents中了。
}

public boolean getParents(TreeNode root, TreeNode p, Stack<TreeNode> stack) {
    if (root == null) {
        return false;
    }

    // System.out.println("root:" + root.val);
    if (root == p) {
        stack.push(root);
        // 找到了
        return true;
    }

    stack.push(root);
    if(getParents(root.left, p, stack)){
        return true;
    }
    if(getParents(root.right, p, stack)){
        return true;
    }
    // 没找到节点,还原现场
    stack.pop();

    return false;
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理