转载地址:http://blog.csdn.net/jiusuihe297816/article/details/12259837
在一个完全二叉树中插入新的节点,注意这里的完全二叉树并非二叉搜索树,因此我们只需要定位最后一个结点就可以了,不需要满足二叉搜索树的条件。
一个最简单的想法就是BFS,如果不是満二叉树,找到第一个有一个子树为空的节点即可。否则,则需要找到最下一层的最左结点。
另外一个想法是利用完全二叉树的性质,首先判断左子树的最右结点与右子树的最右结点高度,如果相等,只需要插入到左子树即可,否则插入右子树。
它的递归程序如下:
Node* insert(Node* root,Node*newnode){
if(!root||!newnode)return NULL;
if(!root->l){
root->l=newnode;
return root;
}
else if(!root->r){
root->r=newnode;
return root;
}
int lrh=0;
int rrh=0;
Node *pNode=root->l;
while(pNode){
lrh++;
pNode=pNode->r;
}
pNode=root->r;
while(pNode){
rrh++;
pNode=pNode->r;
}
if(lrh!=rrh){
return insert(root->r,newnode);
}
else
return insert(root->l,newnode);
}