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

二叉搜索树与双向链表

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

相关推荐

09-22 22:22
中山大学 Java
双尔:赌对了,不用经历秋招的炼狱真的太好了,羡慕了
点赞 评论 收藏
分享
10-14 21:00
门头沟学院 Java
吃花椒的狸猫:这个人说的倒是实话,特别是小公司,一个实习生哪里来的那么多要求
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务