存储结构与基本的操作
//二叉树的创建
struct node{
int data;
node* lchild;//指向左子树根节点的指针
node* rchild;//指向右子树根节点的指针
};
//二叉树建树前根节点不存在,其地址一般设为NULL
node* root = NULL;
//生成一个新节点,v为节点权值
node* newNode(int v){
node* Node = new node;
Node->data = v;
Node->lchild = NULL;
Node->rchild = NULL;
return Node;
}
//二叉树查找到x并更新为newdata
void search(node* root,int x,int newdata){
if(root == NULL){//空树,递归边界
return;
}
if(root->data == x){//找到x,更新data为newdata
root->data = newdata;
}
search(root->lchild,x,newdata);//递归找左子树
search(root->rchild,x,newdata);//递归找右子树
}
//二叉树的建立
node* Create(int data[],int n){
node* root = NULL;//新建空根节点root
for(int i = 0;i <n;i++){
insert(root,data[i]);//将data[0]-data[n-1]插入二叉树中
}
return root;//返回根节点
}
//二叉树节点的插入(确定知道要插入左子树还是右子树,而不是两个都试)
//注意根节点指针root要使用引用,否则插入不会成功
void insert(node* &root,int x){
if(root == NULL){//空树,说明查找失败,即插入位置
root = newNode(x);
return;
}
if(由二叉树的性质,x应该插入在左子树){
insert(root->lchild,x);
}
else{
insert(root->rchild,x);
}
}