//平衡二叉树转为排序的双向链表
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;
}