【问题标题】:In a binary tree print nodes which can not be searched by binary search在二叉树中打印无法通过二分搜索搜索到的节点
【发布时间】:2020-10-28 11:21:19
【问题描述】:

我正在尝试打印所有无法通过二分搜索算法搜索到的二叉树节点。由于 BST 也是基于二分搜索算法,所以我试图打印不符合 BST 结构的节点。

以下代码 sn-p 在右叶值大于根的根的情况下失败,例如:

public class PrintBinarySearchable {
    static class Node {
        int key, height;
        Node left, right;

        public Node(int d) {
            key = d;
            left = right = null;
        }
    }

    Node prev;

    private void printSearchable(Node node, Node prev, boolean isRight) {
        if (node == null)
            return;
        if (prev == null)
            System.out.print(node.key + " ");

        printSearchable(node.left, node, false);

        if (!isRight && prev != null && node.key < prev.key)
            System.out.print(node.key + " ");

        if (isRight && prev != null && node.key > prev.key)
            System.out.print(node.key + " ");

        printSearchable(node.right, node, true);

    }

    public static void main(String[] args) {
        Node root = new Node(7);
        root.left = new Node(2);
        root.right = new Node(9);
        root.left.left = new Node(1);
        root.left.right = new Node(51);

        PrintBinarySearchable tree = new PrintBinarySearchable();
        tree.printSearchable(root);
    }

    private void printSearchable(Node root) {
        printSearchable(root, null, false);
    }
}

【问题讨论】:

    标签: java binary-tree binary-search


    【解决方案1】:

    这感觉像是一项家庭作业,所以我不会在这里给出完整的答案。相反,我会给你一些关于如何解决这个问题的提示。

    • 与其担心节点是左还是右以及它的父节点是什么来确定它是否可搜索,不如从父节点进行检查。如果您有父级,则可以确定其子代是否可搜索。
    • 如果您是从父级确定,则在递归中不需要特殊情况 - 只需在 printSearchable 内调用 printSearchable(node.right);printSearchable(node.left)。然后你可以调用printSearchable(root),它会打印所有的节点。

    【讨论】:

    • 感谢唐的回复,这不是家庭作业。我仍然不确定如何将当前节点的值与其根的根进行比较。例如,根 7 有两个子节点,左边是节点 2,右边是节点 9。现在节点 2 有两个子节点 1 和节点 51。节点 51 是一个可搜索的节点 w.r.t。节点 2 但它是无效的节点 w.r.t.节点 2 的父节点,即节点 7。在这种情况下您的建议将如何发挥作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多