二叉排序树转为非空的双向链表,非递归实现

class Solution:
    def Convert(self, pRootOfTree):
        root=pRootOfTree
        # 需要判断边界条件:二叉树为空
        if not root:
            return
        s=[]
        res=[]
        s.append(root)
        node=root.left
        while s or node:
            if node:
                s.append(node)
                node=node.left
            else:
                p=s.pop()
                res.append(p)
                node=p.right
        res_root=res[0]
        while res:
            top=res.pop(0)
            if res:
                top.right=res[0]
                res[0].left=top
        return res_root




按照中序遍历二叉树非递归的方式先中序遍历二叉树,我们必然得到一个有序的list
接下来,就是要对这个有序的list里的每个节点修改他们的左右指针(即原来二叉树里的左右孩子指针):
我们不断的从数组的索引0位置(即栈底而不是栈顶)出栈元素,这个元素一定是数组里最小的,那么这个元素按照从栈底的位置出栈后,它的right指针应该指向当前栈的栈底,而当前栈的栈底的left指针应该指向它
注意判断边界条件:当栈空时退出循环,且上述操作只能在栈非空时进行,即在循环内还要进行一次栈非空的判断,因为循环体内上述操作之前,先进行了出栈。
全部评论

相关推荐

06-27 12:30
延安大学 C++
实习+外包,这两个公司底层融为一体了,如何评价呢?
一表renzha:之前面了一家外包的大模型,基本上都能答出来,那面试官感觉还没我懂,然后把我挂了,我都还没嫌弃他是外包,他把我挂了……
第一份工作能做外包吗?
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 20:55
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务