二叉搜索树与双向链表(important)

题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

解题思路:
根据中序遍历的非递归实现完成。、

对于任一结点P,

1)若其左孩子不为空,则将P入栈并将P的左孩子置为当前的P,然后对当前结点P再进行相同的处理;

2)若其左孩子为空,则取栈顶元素并进行出栈操作,访问该栈顶结点,然后将当前的P置为栈顶结点的右孩子;

3)直到P为NULL并且栈为空则遍历结束。

python solution:

# -*- coding:utf-8 -*-
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def Convert(self, pRootOfTree):
        if pRootOfTree is None:
            return None
        stack = []
        p = pRootOfTree
        pre = None
        isfirst = True
        while p or len(stack):
            while p:
                stack.append(p)
                p = p.left
            p = stack.pop(-1)
            if isfirst:
                root = p
                pre = root
                isfirst = False
            else:
                pre.right = p
                p.left = pre
                pre = p
            p = p.right
        return root

参考:https://www.cnblogs.com/SHERO-Vae/p/5800363.html

猜你喜欢

转载自www.cnblogs.com/bernieloveslife/p/10426570.html