如何实现二叉树建立

illuminati 2009-10-11 01:44:03
如何实现这样二叉树的建立, void Insert(Node* m);
规则如下,m应该插入到较短的一个子树上,如果两边子树长度相同,则插在左子树上。就是完全二元树的建立过程。
自己想了很久没有太好的解决方案,期待高手详细解答
...全文
72 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
world_hum84 2009-10-11
  • 打赏
  • 举报
回复
你这就相当于一个完全对称的二叉树
可以在节点上加一个域,用来存储以当前节点为根的子树所拥有的节点数,
struct node
{
int num;
node* lchild;
node* rchild;
}
然后可以这样插入
设p指向当前节点
p->num++;
if(!p->lchild)
{把节点插入到p的左孩子上}
else if(!p->rchild)
{把节点插入到p的右孩子上}
else if(p->lchild->num > p->rchild->num)
p = p->rchild;
else p = p->lchild
C1053710211 2009-10-11
  • 打赏
  • 举报
回复
你的过程明显不和完全二叉树是等价的,一个有5个节点的完全二叉树就不是你所描述的过程所构造的
如果是构造完全二叉树使用一个队列就可以解决了 类似于先广遍历的过程
每当新加入一个节点就放入队列 然后从队列头取新的节点添加他的子节点 直到最右非叶子节点为止

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧