二叉搜索树与双向链表,Python实现

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Stack:
    def __init__(self):
        self.depth = -1
        self.elems = []
    def is_empty(self):
        return self.depth == -1
    def push(self, elem):
        self.elems.append(elem)
        self.depth += 1
    def pop(self):
        if not self.is_empty():
            self.depth -= 1
            return self.elems.pop()
        return None

def get_tree(tree_node_num):
    root = TreeNode(1)
    st = Stack()
    st.push(root)
    i = 2
    while True:
        if i < tree_node_num+2:
            tree_node = st.pop()
            tree_node.left = TreeNode(i)
            st.push(tree_node.left)
            i += 1
            if i > tree_node_num+2:
                break
            tree_node.right = TreeNode(i)
            st.push(tree_node.right)
            i += 1
        else:
            break
    while not st.is_empty():
        st.pop()
    return root


def travel(root):
    if root == None:
        return None
    print(root.val)
    travel(root.left)
    travel(root.right)


class Solution:
    def __init__(self):
        self.listHead = None
        self.listTail = None

    def convert_node(self, root):
        if root == None:
            return None
        self.convert_node(root.left)
        if self.listHead == None:
            self.listHead = root
            self.listTail = root
        else:
            self.listTail.right = root
            root.left = self.listTail
            self.listTail = root
        self.convert_node(root.right)
        return self.listHead

    def print_list(self, head):
        p = head
        while p.right:
            print(p.val, end=" ")
            p = p.right
        print(p.val)
        while p:
            print(p.val, end=" ")
            p = p.left
            
            

    
if __name__ == "__main__":
    root = get_tree(10)
    so = Solution()
    root = so.convert_node(root)
    so.print_list(root)
    



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值