平衡二叉树转为排序的双向链表;知道孩子如何求双亲

//平衡二叉树转为排序的双向链表
void func(T*& tree,T* prev = nullptr) //这里传的相当于是二级指针,因为内部的修改将会影响外部根指针的结构
{
	if (tree == nullptr)
		return;
	func(tree->left);
	tree->left = prev;
	if (prev)
		prev->right = tree;
	prev = tree;
	func(tree->right);
}

最终完毕之后,tree就会变成指向平衡二叉树,最终转换之后的双向链表的,最大的结点。
在这里插入图片描述
但是最大的结点的右指针没有指向,所以在func函数执行完毕之后,应该使tree的right = nullptr






//知道孩子如何求双亲
Node* GetParent(Node* pRoot,Node* pNode)
{
	if(pRoot == nullptr || pNode == nullptr && pNode == pRoot)  //如果要求的结点刚好就是根节点的话,那么也是直接返回空
		return nullptr;
	if(pRoot->left == pNode || pRoot->right == pNode)
		return pRoot;
	Node* pRet = GetParent(pRoot->left,pNode);
	if(pRet)
		return pRet;
	Node* pRet = GetParent(pRoot->right,pNode);
	return pRet;
}
发布了230 篇原创文章 · 获赞 28 · 访问量 9294

猜你喜欢

转载自blog.csdn.net/weixin_43767691/article/details/103943552