将元素添加(和查找)到二叉树(NOT BST)

时间:2013-11-12 18:19:04

标签: java algorithm binary-tree pseudocode

所以我试图在java中将元素放在二叉树(不是搜索树)中。我到处寻找,我只能看到将其插入二进制搜索树的算法(我想要一个简单的二叉树)。鉴于父节点的值,我需要设置左右子节点。我的计划如下:

public void addLeft(E elem, E parentVal) {
//Find node with parentVal
//Create node with element elem (call it newNode)
//Set the left child of the node with parentVal as newNode
}

最后两个步骤相当简单,所以我真正的问题是找到具有给定值的节点。 在搜索树中,这是一项简单的任务,但在普通的二叉树中,我不知道该怎么做。我知道它不会有效率;据我所知,要在普通二叉树中向给定节点添加元素,我们必须遍历整个树以找到该节点。有关如何做到这一点的任何建议?假设不会有重复的数字(所有节点都有唯一的元素)。我已经将其标记为算法/伪代码,所以我只需要一个基本的想法即可开始(虽然代码也很受欢迎)。

2 个答案:

答案 0 :(得分:0)

这是一种递归遍历树并在找到parentVal时停止的简单方法:

// returns true if the element has been added to this subtree
public boolean addLeft(E elem, E parentVal) {
    if (this.equals(parentVal)) {
        //Create node with element elem (call it newNode)
        //Set the left child of the node with parentVal as newNode
        return true;
    } else if (leftChild != null && leftChild.addLeft(elem, parentVal)) {
        return true;
    } else {
        return rightChild != null && rightChild.addLeft(elem, parentVal);
    }
}

这假设一个节点可以通过leftChild / rightChild访问其子节点。

答案 1 :(得分:0)

Google code中找到此内容并在github搜索中将我带到Java implementation

另一个快速原始的写作实现是python implementation of Binary tree。链接的标题是误导性的,但检查整个文章。

从这里的链接是一个高级伪装。

class Node:
    ...
    def insert(self, data):
        """
        Insert new node with data

        @param data node data object to insert
        """
        if data < self.data:
            if self.left is None:
                self.left = Node(data)
            else:
                self.left.insert(data)
        else:
            if self.right is None:
                self.right = Node(data)
            else:
                self.right.insert(data)