簡體   English   中英

在二叉樹中打印無法通過二分搜索搜索的節點

[英]In a binary tree print nodes which can not be searched by binary search

我正在嘗試打印所有無法通過二分搜索算法搜索的二叉樹節點。 由於 BST 也是基於二進制搜索算法,所以我試圖打印不符合 BST 結構的節點。

下面的代碼片段在右葉值大於根的根的情況下失敗,例如:

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);
    }
}

這感覺就像一個家庭作業,所以我不會在這里給出完整的答案。 相反,我會給你一些關於如何解決這個問題的提示。

  • 與其擔心節點是否左/右以及它的父節點是什么來確定它是否可搜索,不如從父節點進行檢查。 如果您有父級,則可以確定其后代是否可搜索。
  • 如果您是從父代做出決定,則在您的遞歸中不需要特殊情況——只需調用printSearchable(node.right); printSearchable(node.left)內的printSearchable 然后你可以調用printSearchable(root) ,它會打印所有節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM