简体   繁体   English

从二叉树中删除节点时遇到问题?

[英]Facing problem when removing node from the binary tree?

 class Node{ constructor(element){ this.element = element; this.right = null; this.left = null; } } class BST{ constructor(){ this.head = null; } add(element){ var node = new Node(element); if(this.head === null){ this.head = node; }else{ this.insertNode(this.head,node); } } insertNode(node,key){ if(key.element < node.element){ if(node.left === null){ node.left = key; }else{ this.insertNode(node.left,key); } }else{ if(node.right === null){ node.right = key; }else{ this.insertNode(node.right, key); } } } remove(element){ this.head = this.removeNode(this.head,element); } removeNode(node,key){ if(node === null){ return null; }else if(key < node.element){ node.left = this.removeNode(node.left,key); return node; }else if(key > node.element){ node.right = this.removeNode(node.right,key); return node; }else{ if(node.left === null && node.right === null){ node = null; return node; } if(node.left === null){ node = node.right; return node; }else if(node.right === null){ node = node.left; return node; } var temp = this.findMinNode(node.right); node.element = temp.element; node.right = this.removeNode(node.right, temp.element); return node; } } findMinNode(node){ if(node.left === null){ return node; }else{ this.findMinNode(node.left); } } } var bst = new BST(); bst.add(10); bst.add(5); bst.add(3); bst.add(7); bst.add(4); bst.add(2); bst.add(6); bst.add(9); bst.add(8); bst.add(15); bst.add(24); bst.add(22); bst.add(25); bst.add(21); bst.remove(3); console.log(bst);

When I removing node '5' from the binary tree, it show error that 'Cannot read property 'element' of undefined' but when i deleting the node '3' from the binary tree the it not showing me error, on that time the code works properly and deleting the node '3' perfectly.当我从二叉树中删除节点'5'时,它显示错误'无法读取未定义的属性'元素'但是当我从二叉树中删除节点'3'时它没有显示错误,当时代码正常工作并完美删除节点'3'。

enter code here在此处输入代码

class Node{
 constructor(element){
    this.element = element;
    this.right = null;
    this.left = null;
 }
}

class BST{
 constructor(){
    this.head = null;
 }

 add(element){
    var node = new Node(element);

    if(this.head === null){
        this.head = node;
    }else{
        this.insertNode(this.head,node);
    }
 }
 insertNode(node,key){
    if(key.element < node.element){
        if(node.left === null){
            node.left = key;
        }else{
            this.insertNode(node.left,key);
        }
    }else{
        if(node.right === null){
            node.right = key;
        }else{
            this.insertNode(node.right, key);
        }
    }
 }

 remove(element){
    this.head = this.removeNode(this.head,element);
 }
 removeNode(node,key){
    if(node === null){
        return null;
    }else if(key < node.element){
        node.left = this.removeNode(node.left,key);
        return node;
    }else if(key > node.element){
        node.right = this.removeNode(node.right,key);
        return node;
    }else{
        if(node.left === null && node.right === null){
            node = null;
            return node;
        }
        if(node.left === null){
            node = node.right;
            return node;
        }else if(node.right === null){
            node = node.left;
            return node;
        }
        var temp = this.findMinNode(node.right);
        node.element = temp.element;

        node.right = this.removeNode(node.right, temp.element);
        return node;

    }
 }

 findMinNode(node){
    if(node.left === null){
        return node;
    }else{
        this.findMinNode(node.left);
    }
 }
 }

 var bst = new BST();
 bst.add(10);
 bst.add(5);
 bst.add(3);
 bst.add(7);
 bst.add(4);
 bst.add(2);
 bst.add(6);
 bst.add(9);
 bst.add(8);
 bst.add(15);
 bst.add(24);
 bst.add(22);
 bst.add(25);
 bst.add(21);
 bst.remove(5);
 console.log(bst);

output: for removing node 5 from the binary tree output:用于从二叉树中删除节点 5

 node.element = temp.element;
                    ^
 TypeError: Cannot read property 'element' of undefined

output: for removing node 3 from the binary tree. output:用于从二叉树中删除节点 3。

 BST {
  head: Node {
  element: 10,
  right: Node { element: 15, right: [Node], left: null },
  left: Node { element: 5, right: [Node], left: [Node] }
  }
 }

The problem is in findMinNode method.问题出在findMinNode方法中。 You probably forgot to add return inside the else statement:您可能忘记在else语句中添加return

  findMinNode(node) {
    if (node.left === null) {
      return node;
    } else {
      // return the value of recursive call
      return this.findMinNode(node.left);
    }
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM