题解 | 二叉搜索树与双向链表

二叉搜索树与双向链表

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5

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

全部评论
有点难以理解 定义两个节点,first用于返回头节点 pre节点用于标识当前遍历节点的前一个节点 由于中序遍历是左中右,所以只要每次遍历的时候都更新当前遍历的节点也就是中节点为pre就可以了, 然后下一个处理的节点和pre做连接就可以了 所以其实很好理解,就相当于中序遍历,但每次遍历的时候都会记录pre节点,用于后续的链接 非常简单,不知道为什么我理解了这么久
点赞 回复 分享
发布于 04-10 11:43 上海

相关推荐

04-06 11:24
已编辑
太原学院 C++
真烦好烦真烦:感觉不太对劲,这种主动加微信的一般都是坑,要小心辨别
点赞 评论 收藏
分享
豆泥🍀:同26届,加油,我也还没找到查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务