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

二叉搜索树与双向链表

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

关键点1:二叉搜索树的中序遍历有序

关键点2:为了进行节点的链接,应引入前一个节点的引用 prev

在中序遍历的过程中对两两节点进行链接

class Solution {
public:
    void InOrder(TreeNode* cur, TreeNode*& prev)
    {
        if(cur == nullptr) {
            return;
        }

        InOrder(cur->left, prev);
        //当前节点的前驱指针应指向前一个遍历的节点
        cur->left = prev;
        //前一个被遍历的节点的后继指针应指向当前节点
        if(prev) {
            prev->right = cur;
        }
        prev = cur;
        InOrder(cur->right, prev);
    }

    TreeNode* Convert(TreeNode* pRootOfTree)
	{
		TreeNode* prev = nullptr;
		InOrder(pRootOfTree, prev);
		TreeNode* head = pRootOfTree;
	  	//找链表头节点以返回
		while(head && head->left) {
			head = head->left;
		}
		return head;
    }
};

全部评论

相关推荐

吴offer选手:我卡在笔试才是最好笑的,甚至没给我发过笔试链接
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
03-07 13:49
门头沟学院 Java
逆流河上万仙退:可能是发的钱太少了 怕你过来实习还要自己贴钱 意向就不高 省的浪费大家时间 可能你通过了也不会去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务