您的位置:首页 > 理论基础 > 数据结构算法

018给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点“(keep it up)

2014-09-03 01:04 393 查看
给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点(即中序遍历后它的后继结点), 

其中每个结点都有指向其父亲的链接。

这个题本质就是线索化二叉树时找后继结点的题。找后继结点存在两种情况:

1 如果当前结点有右孩子,则后继结点为右孩子的最左结点

2 如果没有右孩子,

     A 当前结点为父结点的左孩子,则父结点就是后继结点
B 当前结点为父结点的右孩子,则向父结点找,直到当前结点不是父结点的右孩子终止,此时
  父节点就是后继结点

代码:

struct TreeNode
{
int data;
TreeNode* leftChild;
TreeNode* rightChild;
TreeNode* parent;
};

TreeNode* findContinue(const TreeNode* vNode)
{
if (vNode == NULL) return NULL;

if (vNode->rightChild != NULL)
{
TreeNode* Tmp = vNode->rightChild;
while (Tmp->leftChild != NULL)
{
Tmp = Tmp->leftChild;
}
return Tmp;
}

TreeNode* Cur = vNode;
TreeNode* pParent = Cur->parent;
while (pParent != NULL && pParent->rightChild == Cur)
{
Cur = pParent;
pParent = pParent->rightChild;
}
return pParent;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 数据结构 二叉树
相关文章推荐