JZ26 二叉搜索树转换为一个排序的双向链表

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

解:实质上就是对二叉树进行遍历,在遍历的基础上加入指针的指向;因为要求排序的双向链表,所以可以考虑中序遍历,具体过程分析如下:
在这里插入图片描述
上图展示了部分过程,剩下的右子树依此类推;具体代码实现如下:

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
    
    
public:
    TreeNode *pre = NULL;
    TreeNode *root = NULL;
    
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
    
    
        if(pRootOfTree == NULL)
            return NULL;
        
        Convert(pRootOfTree -> left);
        
        pRootOfTree -> left = pre;
        if(pre != NULL)
            pre -> right = pRootOfTree;
        
        pre = pRootOfTree;
        if(root == NULL)
            root = pre;
        
        Convert(pRootOfTree -> right);
        
        return root;
    }
};

猜你喜欢

转载自blog.csdn.net/pikaqiu_n95/article/details/109708459