首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将节点插入二叉树

将节点插入二叉树
EN

Stack Overflow用户
提问于 2018-02-02 19:13:26
回答 1查看 623关注 0票数 1

我正在尝试实现一个Binary Tree以及用于插入节点、遍历节点等的支持方法。我有一种特殊的情况,在这种情况下,我的代码进入循环,或者等待太久才能返回特定的输入。鉴于我所面临的问题,我认为它是独特的,因此我张贴它,我试图了解我可能做错了什么。以下是我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Create a class for the node data structure


    class Node:
        data = None
        left = None
        right = None
        depth = 0

        # Create a node with some data
        def __init__(self, data):
            self.data = data

        # Set a left node to this node
        def set_left(self, lnode):
            self.left = lnode

        def set_right(self, rnode):
            self.right = rnode

        def get_left(self):
           return self.left.data

        def is_leaf(self):
           if self.left is None and self.right is None:
               return True
           return



       def has_left(self):
           if self.left:
               return True
           return False

       def has_right(self):
           if self.right:
              return True
           return False
# Class for the Btree 
class BTree:
    root = None

    # Create a tree with a base node
    def __init__(self,root):
        self.root = root
        self.count = 0

    # Add node based on the value it's holding

    def insert_node(self,node):
        prev = temp = self.root
        # Traverse until you find the right place to insert the node
        print("Inserting node {}".format(node.data))
        while temp is not None:
            prev = temp
            if node.data < temp.data:
                temp = temp.left
                continue
            if node.data > temp.data:
                temp = temp.right
                continue

        # Go ahead and insert the node here
        if node.data < prev.data:
            prev.set_left(node)
        if node.data > prev.data:
            prev.set_right(node)
    '''
    Pre-order traversal
    Visit the root
    Visit the left subtree
    Visit the right subtree
    '''

    def traverse_pre(self,root):
        # Start with the root
        if root:
            self.count += 1
            print("{}".format(root.data))
            self.traverse_pre(root.left)
            self.traverse_pre(root.right)

    def maxdepth(self, node):
        if node is None:
            return 0
        else:
            # Compute the depth of each subtree
            ldepth = self.maxdepth(node.left)
            rdepth = self.maxdepth(node.right)

            return max(ldepth, rdepth) + 1



if __name__ == '__main__':
    rt = Node(10)
    btree = BTree(rt)
    lst = [14,15,4,9,7,18,5,6,3,54,78,10,100,13,12,11]
    nodes = []
    for i in lst:
        nodes.append(Node(i))
    for node in nodes:
        btree.insert_node(node)
    btree.traverse_pre(rt)
    print("The node count is {}".format(btree.count))
    print(btree.maxdepth(rt))

我对输入没有问题。

14,15,4,9,7,18,5,6,54,78,100,13,12,11

但是,当我用一个额外的10输入输入时,即

14,15,4,9,7,18,5,6,54,78,100,13,12,11

我看到程序永远不会返回,等待/无限期运行,有人能帮助我理解这里的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-02-02 20:37:21

你的名单上有第10位。

首先将'10‘变成一个变量,n2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
n2 = 10
rt = Node(n2)
...

在其中加上一些重复的,当然还有违规的数字10

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lst = [14,15,4,9,7,18,5,6,3,54,78,100,13,12,11,12,12, 10]

将lst更改为set,这将不允许重复,并将删除任何副本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lst_set = set()

换乘lst_set。我们将add用于python中的集合,而不是append

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i in lst:
    lst_set.add(i)

nodes = []
for i in lst_set:

最后检查,以确保它不是原来的n2号码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    if i != n2:
        nodes.append(Node(i))

当然,这假定您的原始数据是以列表形式出现的。如果以集合开头,则可以避免从列表中进行转换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48593572

复制
相关文章
节点插入
对于早期的w3c浏览器,并没有实现ie的私有方法insertAdjacentHTML(目前已是HTML5标准),可以用appendChild模拟该方法的实现: if(typeof HTMLElement !=='undefined' && !HTMLElement.prototype.insertAdjacentHTML){ var insertAdjacentElement = function(node,position,el){ switch (
欲休
2018/03/15
1.6K0
jquery 元素节点操作 - 创建节点、插入节点、删除节点
前面的篇章对于jquery的元素操作大部分是使用html()的方式来操作,这种直接使用字符串创建的方式也是性能最高的。
Devops海洋的渔夫
2019/05/31
9K0
平衡二叉树 AVL 的插入节点后旋转方法分析
该文章讨论了技术社区中如何提高文章阅读体验、社区氛围和用户参与度的问题。作者提出了三个主要策略:1.优化文章排版和结构,以增强阅读体验;2.设立社区规范和行为准则,以引导用户参与;3.通过举办技术分享、问答活动等方式,提高用户参与度和社区氛围。
s1mba
2017/12/28
1.2K0
平衡二叉树 AVL 的插入节点后旋转方法分析
链表头部插入节点
先创建一个头节点指针置NULL代表链表现在为空,我们通过insert函数给增加的节点分配内存,然后让节点的link指向head(此时head是NULL) 再将head指向此节点,我们大致上就创建出了下图的节点
用户7272142
2023/10/11
2050
链表头部插入节点
链表任意位置插入节点
之前我们的链表代码只能从头部插入节点,也就是通过修改head指向新节点,然后新节点指向head之前指向的节点达到增加头节点的目的。
用户7272142
2023/10/11
1840
链表任意位置插入节点
js插入节点appendChild和insertBefore
首先 从定义来理解 这两个方法:  appendChild() 方法:可向节点的子节点列表的末尾添加新的子节点。语法:appendChild(newchild)  insertBefore() 方法:可在已有的子节点前插入一个新的子节点。语法 :insertBefore(newchild,refchild)  相同之处:插入子节点  不同之处:实现原理方法不同。       appendChild方法是在父级节点中的子节点的末尾添加新的节点(相对于父级节点 来说)。       insertBefore 方
蓓蕾心晴
2018/04/12
3K0
二叉树:将二叉树中的所有节点的左右子树进行交换
二叉树遍历的简单应用 struct node { int val; node *left, *right; }; node *swapSubTree(node *root) { if (!root) return NULL; else { //交换的过程 node *tmp = root->left; root->left = root->right; root->right = tmp; swapSubTree(root->left); swapSubTree(root-
lexingsen
2022/02/24
5070
属性 元素的内容 创建,插入和删除节点 虚拟节点
表示HTML文档元素的HTMLElement对象定义了读/写属性。映射了元素的HTML属性。HTMLElement定义了通用的HTTP属性。以及事件处理程序的属性。特定的Element子类型为其元素定义了特定的属性。
mySoul
2018/08/07
2.4K0
动画:链表插入一个节点
你好,我是 zhenguo 我正在努力精心制作从零学Python、从零学算法的视频教程。 今天是第22集:链表插入一个节点。 如下所示,欲将红色块0插入到绿色块1后, 只需要下面三个步骤:
double
2022/01/26
4090
动画:链表插入一个节点
二叉树子节点的最近父节点
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
conanma
2021/06/08
1.8K0
二叉树:删除节点
https://leetcode-cn.com/problems/delete-node-in-a-bst/
灰子学技术
2020/08/21
7750
二叉树:删除节点
SQL 二叉树节点
这是一道在 HackerRank 上的 SQL 竞赛题,题目叫做“Binary Tree Nodes”,它的难度等级属于中级。
白日梦想家
2020/07/31
9670
SQL 二叉树节点
【说站】js中insert如何插入节点
以上就是js中insert插入节点的方法,希望对大家有所帮助。更多js学习指路:js教程
很酷的站长
2022/11/24
2.8K0
【说站】js中insert如何插入节点
排序二叉树-删除节点
我们已经了解了什么是排序二叉树以及排序二叉树的遍历和添加元素,现在我们一起来看一下,排序二叉树是如何删除元素的。
shengjk1
2020/06/28
5340
排序二叉树-删除节点
前面( https://blog.csdn.net/jsjsjs1789/article/details/106772632 ),我们已经了解了什么是排序二叉树以及排序二叉树的遍历和添加元素,现在我们一起来看一下,排序二叉树是如何删除元素的。
全栈程序员站长
2022/09/16
2770
DMO节点内部插入的常用方法与区别
动态创建的元素是不够的,它只是临时存放在内存中,最终我们需要放到页面文档并呈现出来。那么问题来了,怎么放到文档上?
小周sir
2019/09/23
1.2K0
【算法】二叉树中找到一个节点的后继节点,前继节点
该结构比普通二叉树节点结构多了一个指向父节点parent指针。 假设有一 棵Node类型的节点组成的二叉树,树中每个节点的parent指针都正确地指向自己的父节点,头节点的parent指向null。 只给一个在二叉树中的某个节点 node,分别实现返回node的后继,前继节点的函数。 在二叉树的中序遍历的序列中,node的下一个节点叫作node的后继节点,node的上一个节点叫做前节点。
MapleYe
2020/03/28
1.7K0
二叉树添加删除节点Python
采用递归调用实现二叉树添加、删除节点。文章采用Python对象引用方式实现指针结构的创建。
birdskyws
2018/09/12
2.8K0
[javaSE] 数据结构(二叉查找树-插入节点)
二叉查找树(Binary Search Tree),又被称为二叉搜索树,它是特殊的二叉树,左子树的节点值小于右子树的节点值。
唯一Chat
2019/09/10
5730
点击加载更多

相似问题

将节点插入到二叉树中

21

使用指针将节点插入二叉树

10

插入二叉树节点

10

二叉树节点插入

41

将节点插入二叉树时,原始节点会发生更改。

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文