21xrx.com
2024-11-10 00:40:28 Sunday
登录
文章检索 我的文章 写文章
C++建树教程
2023-07-08 06:00:58 深夜i     --     --
C++ 建树 教程

在算法和数据结构中,树是一种重要的数据结构。实现一个树的基础是建树,而C++是一种流行的编程语言,因此C++建树教程是一项必要的学习。

基本框架

在C++中,一个简单的树可以用一个指向根节点的指针表示。每个节点都是一个结构体,每个结构体都包含一个值和指向子节点的指针数组。以下是一个实现二叉树的基本框架。


#include <iostream>

using namespace std;

struct node{

  int val;

  node *left,*right;

};

node *root=NULL;

void insert(int x){

  if(root==NULL)

    root=new node;

    root->val=x;

    root->left=root->right=NULL;

  

  else{

    node *p=root,*pre;

    while(p!=NULL){

      pre=p;

      if(p->val>x)

        p=p->left;

      else

        p=p->right;

    }

    p=new node;

    p->val=x;

    p->left=p->right=NULL;

    if(pre->val>x)

      pre->left=p;

    else

      pre->right=p;

  }

}

在这个基本框架中,我们只实现了二叉树的插入操作。对于其他类型的树,实现方式可能略有不同,但基本框架仍然可用。

操作

除了插入的基本框架外,还需要实现其他常用的操作,例如查找、删除、前序/中序/后序遍历等。以下是一个完整的二叉搜索树实现,其中包含查找、删除和前序遍历。


#include <iostream>

using namespace std;

struct node{

  int val;

  node *left,*right;

};

node *root=NULL;

void insert(int x){

  if(root==NULL)

    root=new node;

    root->val=x;

    root->left=root->right=NULL;

  

  else{

    node *p=root,*pre;

    while(p!=NULL){

      pre=p;

      if(p->val>x)

        p=p->left;

      else

        p=p->right;

    }

    p=new node;

    p->val=x;

    p->left=p->right=NULL;

    if(pre->val>x)

      pre->left=p;

    else

      pre->right=p;

  }

}

node *find(int x){

  node *p=root;

  while(p!=NULL&&p->val!=x){

    if(p->val>x)

      p=p->left;

    else

      p=p->right;

  }

  if(p==NULL)

    return NULL;

  return p;

}

void del(node *&p){

  if(p->left!=NULL&&p->right!=NULL){

    node *q=p->left,*pre=p;

    while(q->right!=NULL)

      pre=q;

      q=q->right;

    

    p->val=q->val;

    p=q;

  }

  node *child;

  if(p->left!=NULL)

    child=p->left;

  else if(p->right!=NULL)

    child=p->right;

  else

    child=NULL;

  if(p==root)

    root=child;

  else{

    if(p==pre->left)

      pre->left=child;

    else

      pre->right=child;

  }

  delete p;

}

void preorder(node *p){

  if(p!=NULL){

    cout<<p->val<<" ";

    preorder(p->left);

    preorder(p->right);

  }

}

int main(){

  insert(5);

  insert(3);

  insert(8);

  insert(1);

  insert(4);

  insert(6);

  insert(9);

  node *p=find(3);

  if(p!=NULL)

    cout<<"Found:"<<p->val<<endl;

  else

    cout<<"Not Found"<<endl;

  del(p);

  p=find(3);

  if(p!=NULL)

    cout<<"Found:"<<p->val<<endl;

  else

    cout<<"Not Found"<<endl;

  preorder(root);

  return 0;

}

通过这份代码,我们可以看到如何实现二叉树的插入、查找、删除和前序遍历。这些操作是树的基本操作,学习它们是实现更复杂树结构的关键。

总结

建树是实现树的关键步骤,而C++是实现数据结构和算法的流行工具之一。掌握C++建树教程可以让我们更有效率地学习数据结构和算法,从而更具备解决实际问题的能力。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复