当前位置: 首页 > 知识库问答 >
问题:

二叉树插入问题。。。。。insert()仅将新节点放入根节点的子节点

闻慎之
2023-03-14

当我使用insert()将新节点插入到二叉树中时,它只在子节点的位置插入新节点,即使根节点已经有左、右子节点。它不是访问子节点来创建更深层次的二叉树。

抱歉英语不好。

class Node
{
    int key;
    String value;
    Node lc = null;
    Node rc = null;

    Node(int k,String v)
    {   
        key = k;
        value = v;
    }

    public String toString()
    {
        return value + "is" + key;
    }
}

class BT
{
    Node root;
    public void insert(int k,String v)
    {
        Node newnode = new Node(k,v);

        if(root == null)
        {   
            System.out.println("root");
            root = newnode; 
            return;
        }

        Node n = root;
        while(n != null)
        {

            if(newnode.key <= n.key)
            { 
                n = n.lc;
                System.out.println("left");
                if(n==null){n = newnode; break;}
            }
            else
            { 
                n = n.rc;
                System.out.println("right");
                if(n==null){n = newnode; break;}
             } 

        }   
        System.out.println("loop ended");

        return;
    }


    }

    public class test
    {
    public static void main(String arg[])
    {
        BT list = new BT();

        list.insert(19,"one");
        list.insert(67,"sixtyseven");
        list.insert(5,"five");
        list.insert(12,"twelve");
        list.insert(67,"sixtyseven");

    }
}

共有2个答案

穆正祥
2023-03-14

使用递归怎么样?认识到这一点要清楚得多。

public final class BinaryTree {

    private static final boolean ADD_TO_PARENT = true;
    private static final boolean ALREADY_ADDED = false; 

    private Node root;

    public void add(int key, String value) {
        Node node = new Node(key, value);

        if (add(node, root) == ADD_TO_PARENT)
            root = node;
    }

    private static boolean add(Node node, Node parent) {
        if (parent == null)
            return ADD_TO_PARENT;
        if (node.key <= parent.key) {
            if (add(node, parent.left) == ADD_TO_PARENT)
                parent.left = node;
        } else if (add(node, parent.right) == ADD_TO_PARENT)
            parent.right = node;

        return ALREADY_ADDED;
    }

    public static final class Node {

        private final int key;
        private final String value;
        private Node left;
        private Node right;

        public Node(int key, String value) {
            this.key = key;
            this.value = value;
        }

        @Override
        public String toString() {
            return value + " is " + key;
        }
    }

}
龙志勇
2023-03-14

您永远不会更改lcrc链接。试试这样的东西:

        if(newnode.key <= n.key)
        { 
            if(n.lc==null){n.lc = newnode; break;}
            n = n.lc;
            System.out.println("left");
        }
        else
        { 
            if(n.rc==null){n.rc = newnode; break;}
            n = n.rc;
            System.out.println("right");
         } 
 类似资料:
  • 几天来,我一直在使用二进制搜索树实现,我已经到了知道我的根正在通过使用我的“插入()”来填充的地步(当我使用Eclipse进行调试时,我可以看到这一点)。为什么我的其他节点不会被添加到树中? 这是我的BST课程: 这是我的Main(),最终我想在控制台中打印我的BST值,但首先我知道它们需要添加到树中: 公共类Main{

  • 我试图在二叉树中插入节点,如果我用addNode(Node root)替换方法addNode(Node Node)代码运行良好。这是因为我在第一行声明了吗?请解释一下。addNode方法由于字数限制而不完整,否则它是完整的,运行良好。

  • 我试图在二叉树中插入节点,如果我用addNode(Node root)替换方法addNode(Node Node)代码运行良好。这是因为我在第一行声明了吗?请解释一下。addNode方法由于字数限制而不完整,否则它是完整的,运行良好。

  • class Node(object): def __init__(self, data, left=None, right=None): self.data = data self.left = left self.right = right tree = Node(1, Node(3, Node(7, Node(0)), Node(6)), Node(2, Node

  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?

  • 主要内容:src/runoob/binary/BinarySearchTreeInsert.java 文件代码:首先定义一个二分搜索树,Java 代码表示如下: public class BST < Key extends Comparable <Key >, Value > {     // 树中的节点为私有的类, 外界不需要了解二分搜索树节点的具体实现     private class Node {         private Key key ;         private Val