二叉树的后继结点

来源:互联网 发布:win7还原网络设置 编辑:程序博客网 时间:2024/04/27 16:09

题目:给定一个二叉搜索树上的结点,输出其后继结点(按中序遍历)。

解答:假定给定二叉搜索树的结点为x,主要分两种情况:

1.x的右孩子不为空,则x的后继是x的右子树上最小的,也就是右子树上寻找最后一个左孩子。如图所示:


2.x的右孩子为空,则x的后继应该是x的祖先结点或者为空,

  

具体程序如下:

struct TreeNode{char key;TreeNode *left;TreeNode *right;TreeNode *parent;};TreeNode *FindSuccessor(TreeNode *x){if(x->right!=NULL){TreeNode *q=x->right;while(q->left)q=q->left;return q;}TreeNode *p=x->parent;while(p&&x==p->right){x=p;p=p->parent;}return p;}


0 0
原创粉丝点击