• 二叉树的静态实现


      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 }
  • 相关阅读:
    C++初始化列表
    正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话
    C++ 的关键字(保留字)完整介绍
    Qt之UI文件设计和运行机制
    QT 5.12安装
    Win2016 安装VM与Hyper-V冲突解决办法
    多线程与并行
    Framework使用
    MVVMLight
    Knockout 应用
  • 原文地址:https://www.cnblogs.com/zhangqiling/p/12545710.html
Copyright © 2020-2023  润新知