二叉树与度为2的树的区别:
对树来说,结点的子树是不区分左右顺序的,因此度为2的树只能说明树中每个结点个数不超过2。而二叉树虽然也满足每个结点的度均不超过2,但是其子树是讲究左右顺序的,不能随意调换两者位置,这便是二叉树与度为2的树最主要的区别。
两种特殊的二叉树:
1,满二叉树:每一层的结点个数都达到了当层能达到的最大结点数。
2,完全二叉树:除了最下面一层之外,其余层的结点个数都达到了当层能达到的最大结点数,且最下面一层只从左至右连续存在若干结点,而这些连续结点右边的结点全部不存在。
二叉树的存储结构
二叉链表定义如下:
struct node{
typename data;
node* lchild;
node* rchild;
};
由于二叉树建立前根结点为空
node* root = NULL;
如果需要建立新结点
node* newNode(int v){
node* Node = new node;
Node->data = v;
Node->lchild = Node->rchild = NULL;
return Node;
}
二叉树结点的查找、修改
void search(node* root,int x,int y,int newdata){
if(root == NULL){
return ;
}
if(root->data == x){
root->data = newdata;
}
search(root->lchild,x,newdata);
search(root->rchild,x,newdata);
}
二叉树结点的插入
void insert(node*&root,int x){
if(root == NULL){
root = newNode(x);
return ;
}
if(由二叉树性质,x应该插在左子树){
insert(root->lchild,x);
}else{
insert(root->rchild,x);
}
}
二叉树的建立
node* create(int data[],int n){
node* root = NULL;
for(int i = 0;i<n;i++){
insert(root,data[i]);
}
return root;
}