rootとして抽象根は、葉は葉ノードとしてまとめました。
バイナリツリー:左のサブツリー右のサブツリーのルート
完全なバイナリツリーの完全なバイナリツリーの分割
バイナリツリーの関連するコード
#include<cstdio>
#include<cstdlib>
struct node{
int data; //数据域数据类型为typename
node *lchild; //指向左子树的根结点的指针
node *rchild; //指向右子树的根结点的指针
}
node* root=NULL;
//建立新的结点
node* newNode(int v){
node* Node=new node; //申请一个node类型的地址空间
Node->data=v; //结点的权值为v
Node->lchild=Node->rchild=NULL; //初始状态下没有左右孩子
return Node; //返回新建结点的地址
}
//查找、修改操作
void search(node* root,int x,int newdata)
{
if(root==NULL){
return; //空树。死胡同(递归边界)
}
if(root->data==x){
//找到数据域为x的结点,把他修改成newdata
root->data=newdata;
}
search(root->lchild,x,newdata); //往左子树搜索x(递归式)
search(root->rchild,x,newdata); //往右子树搜索x(递归式)
}
//二叉树的插入
//insert函数将在二叉树中插入一个数据域为x的新结点
//注意根结点的指针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); //往右子树搜索(递归式)
}
}
//二叉树的创建
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; //返回根结点
}
そのバイナリツリー挿入位相に注意し、ポインタの変形例であり、それはアドレスポインタ点の完全な変形を確実にするために、動作基準を使用して必要があり、アドレスのコンテンツが変更され、変更する必要はありません。
リストの操作を確認し、ノードは、1つは、このような操作のリストを繰り返しリンクの目的を達成するためのノード構造を呼び出される確立、ポインタフィールド及びデータフィールドである、二つの部分です。