二叉树的静态实现

  1 /*
  2     二叉树的静态实现
  3 */
  4 struct node{
  5     typename data;//数据域 
  6     int lchild;//指向左孩子的指针域 
  7     int rchild;//指向右孩子的指针域 
  8 }Node[maxn];//结点数组,maxn为结点上限个数 
  9 
 10 //二叉树的建立,函数返回根节点root的下标 
 11 int create(/*typename data[],int n*/){//每个节点所对应的值(当然了,也可以在设置为全局变量),以及总的结点个数 
 12     int root = -1;
 13     for(int i=0; i<n; i++){
 14         insert(root,data[i]);//将节点数据插入二叉树中 
 15     }
 16     return root;//返回二叉树的根节点下标 
 17 } 
 18 
 19 //插入,root为根节点在数组中的下标 
 20 void insert(int &root,typename x){//记得加引用 
 21     if(root == -1){//空树,查找失败,即也是插入的位置 
 22         root = newNode(x);//给root赋以新的结点 
 23         return;
 24     } 
 25     if(/*由二叉树的性质,x应该插在左子树*/){
 26         insert(Node[root].lchild,x);//往左子树搜索(递归式) 
 27     }else{
 28         insert(Node[root].rchild,x);//往右子树搜索(递归式) 
 29     }
 30 } 
 31 
 32 int index = 0;//1还是0,由题目意思决定,从零开始还是从一开始
 33 int newNode(typename v){//分配一个Node数组中的结点给新的结点,index为其下标 
 34     Node[index].data = v;//数据域 
 35     Node[index].lchild = -1;//-1或者maxn为空 
 36     Node[index].rchild = -1;
 37     return index++;
 38 } 
 39 
 40 //查找和修改,root为根节点在数组中的下标 
 41 void search(int root, typename x, typename newdata){
 42     if(root == -1){
 43         return;//边界 
 44     } 
 45     if(Node[root].data == x){
 46         //输出或者修改
 47         Node[root].data = newdata;
 48     }
 49     //递归搜索 
 50     search(Node[root].lchild,x,newdata); 
 51     search(Node[root].rchild,x,newdata);
 52 } 
 53 
 54 //关于二叉树的遍历
 55 //前序遍历
 56 void preorder(int root){
 57     if(root == -1){
 58         return;
 59     }
 60     cout << Node[root].data;
 61     preorder(Node[root].lchild);
 62     preorder(Node[root].rchild);
 63 } 
 64 
 65 //中序遍历
 66 void inorder(int root){
 67     if(root == -1){
 68         return;
 69     }
 70     inorder(Node[root].lchild);
 71     cout << Node[root].data;
 72     inorder(Node[root].rchild);
 73 }
 74 
 75 //后序遍历
 76 void postorder(int root){
 77     if(root == -1){
 78         return;
 79     }
 80     postorder(Node[root].lchild);
 81     postorder(Node[root].rchild);
 82     cout << Node[root].data;
 83 } 
 84 
 85 //层序遍历
 86 void layerOrder(int root){
 87     queue<int> q;
 88     q.psuh(root);
 89     while(!q.empty()){
 90         int now = q.front();
 91         q.pop();
 92         cout << Node[now].data << " ";
 93         if(Node[now].lchild != -1){
 94             q.push(Node[now].lchild);
 95         }
 96         if(Node[now].rchild != -1){
 97             q.push(Node[now].rchild);
 98         }
 99     }
100 }
原文地址:https://www.cnblogs.com/zhangqiling/p/12545710.html