将节点添加到二叉搜索树并遍历它(按顺序遍历)

Adding Nodes to a Binary Search Tree and Traversing it (in order traversal)

提问人:Mostack 提问时间:12/3/2022 更新时间:12/3/2022 访问量:104

问:

法典:

public class BinaryTree {
    public static int size = 0;

    private static class BST {
        int value;
        BST leftChild, rightChild;

        BST(int value) {
            this.value = value;
            this.leftChild = null;
            this.rightChild = null;
        }

        BST getLeftChild() {
            return this.leftChild;
        }

        BST getRightChild() {
            return this.rightChild;
        }

        int getValue() {
            return this.value;
        }

        void setLeftChild(BST n) {
            leftChild = n;
        }

        void setRightChild(BST n) {
            rightChild = n;
        }

        public void addNode(BST n) {
            if (n.value < this.value) {
                System.out.println("this's value: " + this.getValue());
                if (this.getLeftChild() == null) {
                    // add node n as left child
                    this.setLeftChild(n);
                } else {
                    // otherwise recurse down the left subtree
                    this.getLeftChild().addNode(n);
                }
            }

            // insert somewhere into the right subtree
            else if (n.value > this.value) {
                if (this.getRightChild() == null) {
                    // add node n as right child
                    this.setRightChild(n);
                } else {
                    // otherwise recurse down the right subtree
                    this.getRightChild().addNode(n);
                }
            }
            // duplicate elements
            else {
                return;
            }
        }

        void inOrderTraversal() {
            if (this.getLeftChild() != null) {
                this.getLeftChild().inOrderTraversal();
            }
            System.out.print(this.getValue() + " ");
            if (this.getRightChild() != null) {
                this.getRightChild().inOrderTraversal();
            }
        }
    }

    static BST rootNode = null;

    void addNode(int value) {
        size++;
        if (rootNode == null) {
            // Create rootNode
            rootNode = new BST(value);
        } else {
            // Add newNode to the tree
            rootNode.addNode(new BST(value));
        }
    }

    public void show() {
        if (rootNode != null) {
            System.out.print("In-order traversal: ");
            rootNode.inOrderTraversal();
            System.out.println();
        } else {
            System.out.println("Empty...");
        }
    }

    public static void main(String[] args) {
        BinaryTree object = new BinaryTree();
        object.addNode(5);
        object.addNode(3);
        object.addNode(7);
        object.addNode(1);
        object.addNode(4);
        object.addNode(6);
        object.addNode(8);
        object.addNode(0);
        object.addNode(2);
        object.show();
    }
}

我仍然无法理解 addNode 方法 (BST) 和 inOrderTraversal (BST) 方法是如何工作的,尤其是“this”关键字如何与点表示法及其递归步骤一起使用......

我尝试创建代码的递归图,但我无法理解递归在这里是如何工作的......有人可以帮我吗?

java 这个 二进制搜索树 的顺序

评论

0赞 akuzminykh 12/3/2022
this只是您当前所在的节点,即您调用的节点。
1赞 akuzminykh 12/3/2022
递归只是通过调用子树逐个节点地进行递归。

答: 暂无答案