请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

值传递问题?

添加方法一:

public void add(E e) {
    if (root == null) {
        root = new Node(e);
        size++;
    } else {
        add(root, e);
    }
}

添加方法二:

public void add(E e) {
    root = add(root, e);
}

对比:

为什么一个不需要赋值,一个需要赋值;
方法一:add(root, e);
方法二:root = add(root, e);

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2020-09-16 08:54:11

抱歉,没理解你的问题。


你的这两个代码都是错误的,都无发做到把 e 添加到二分搜索树中。


代码 1 只有在 root 为空的时候可以让 root 指向一个新节点,否则无穷递归;

代码 2 直接无穷递归。

0 回复 有任何疑惑可以回复我~
  • 提问者 Mrxxm #1
    我指的是root,一个需要赋值,一个不需要
    回复 有任何疑惑可以回复我~ 2020-09-16 08:56:37
  • liuyubobobo 回复 提问者 Mrxxm #2
    我们对正确的代码才会探讨为什么这么做,这两个代码都是错误的。
    回复 有任何疑惑可以回复我~ 2020-09-16 09:02:04
  • 提问者 Mrxxm #3
    完整代码:
    
    // 方法一
        public void add(E e) {
            if (root == null) {
                root = new Node(e);
                size++;
            } else {
                add(root, e);
            }
        }
    
        // 方法一
        private void add(Node node, E e) {
            if (e.equals(node.e)) {
                return ;
            } else if (e.compareTo(node.e) < 0 && node.left == null) {
                node.left = new Node(e);
                size++;
                return ;
            } else if (e.compareTo(node.e) > 0 && node.right == null) {
                node.right = new Node(e);
                size++;
                return ;
            }
    
            if (e.compareTo(node.e) < 0) {
                add(node.left, e);
            } else {
                add(node.right, e);
            }
        }
    
        // 方法二
        public void add(E e) {
            root = add(root, e);
        }
    
        // 方法二(node是新开辟的一块内存)
        private Node add(Node node, E e) {
            if (node == null) {
                size++;
                return new Node(e);
            }
    
            if (e.compareTo((E) node.e) < 0) {
                node.left = add(node.left, e);
            } else if (e.compareTo((E) node.e) > 0) {
                node.right = add(node.right, e);
            }
    
            return node;
        }
    回复 有任何疑惑可以回复我~ 2020-09-16 09:05:58
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信