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

二叉搜索树与双向链表

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 上海

相关推荐

05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
xxxxOxo:该催就催,想要你的不会因为催就挂,催了就挂的是因为本来就要挂你
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务