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

数据结构_二叉树基础

2015-04-16 22:14 381 查看
数据结构真心不是盖的啊!现在觉得为什么公司面试和笔试,1/3的重点都处在这上面。真行不容易啊,并且很容易检测出一个人的实力到底如何。

不要把二叉树想的很复杂,其实就是链表的升级版(毕竟学渣,认识的太肤浅了,没事,反正是写给自己看的)。汗~~~~

<span style="font-size:12px;">//二叉树的链式存储结构
//既然是链式,那么无非就是使用链表的形式进行存储

typedef  struct node
{
int data;
struct node  * lchild, * rchild;
}BiTNode, * BiTree;

//特殊的三叉链表存储
typedef  struct node
{
    int data;
    struct node  * lchild, * rchild, * parent;//parent指向它的上级节点(双亲节点)
}BiTNode, * BiTree;

//创建带有头结点的二叉树,其实就是用了它的左孩子
 BiTree  InitBiTree()
{
BiTNode * head = new BiTNode;
if(!head)
return NULL;//申请失败
else
head->rchild = NULL;//头结点是左孩子指向根节点
return head;
}

//创捷只含根节点的二叉树,其余节点可以通过插入实现
BiTree  createRoot(int value)
{
BiTNode * rootNode = new BiTNode;
if(!rootNode)
return NULL;
else
{
rootNode->data = value;
rootNode->lchild = NULL;
rootNode->rchild = NULL;
}
return rootNode;

}

//在某节点插入左孩子
BiTree insertLchild(int value, BiTree root, BiTree curNode)
{
BiTNode * temp = new BiTNode;
if(curNode == NULL)
{
cout<<"当前没有节点可插人"<<endl;
return NULL;
}
temp->data = value;
if(curNode->lchild == NULL)//当前节点没有左孩子
{
curNode->lchild = temp;
}
else
{
//将当前节点的左孩子作为新插入节点的左孩子
temp->lchild = curNode->lchild;
curNode->lchild = temp;
}
return root;
}

//删除某节点的左孩子,注意删除后相应的该节点的左子树也被删除了
BiTree deleteLchild(BiTree root, BiTree curNode)
{
BiTNode * temp;
if(curNode== NULL || curNode->lchild == NULL)
{
cout<<"没有可删除对象"<<endl;
return NULL;
}
else
{
temp = curNode->lchild;
curNode->lchild = NULL;
delete temp;
}
return root;

}

//同理右孩子跟左孩子类似

int main()
{
BiTree head = NULL, root = NULL;
head =InitBiTree();
root = createRoot(1);
head->lchild = root;
root = insertLchild(2, head, root);
root = insertLchild(3, head, root->lchild);
getchar();
return 0;
}

又来点废话,发现什么没,为什么没有显示二叉树的内容,这就放到下一章二叉树的遍历(面试|笔试 必考)。
</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: