JZ36二叉树排序树与双向链表

image
image

image
image

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
#include <cstddef>
class Solution {
public:

	TreeNode* ans = nullptr;	//最终的链表
	TreeNode* pre = nullptr;	//指向左子树的最大值
    TreeNode* Convert(TreeNode* pRootOfTree) {
        //要求:不能创建任何新的节点,只能调整树中节点的指向
		//中序遍历是一个有序序列
		//中序序列遍历,左根右
		InOrder(pRootOfTree);
		return ans;
	
    }

	void InOrder(TreeNode* pRootOfTree)
	{
		if(!pRootOfTree) return ;
		InOrder(pRootOfTree->left);

		if(ans==NULL)	
		{
			ans = pRootOfTree;  //递归到最后,ans指向的是最小的那个节点
			pre = pRootOfTree;
		}
		else {
			pre->right = pRootOfTree;
			pRootOfTree->left = pre;
			pre = pRootOfTree;
		}

		InOrder(pRootOfTree->right);
	}
};

posted @ 2024-04-18 22:02  蓝色的海嗷  阅读(42)  评论(0)    收藏  举报