数据结构--二叉树(链表)基本操作

来源:互联网 发布:同志软件有哪些 编辑:程序博客网 时间:2024/06/13 06:43
#include "StdAfx.h"  #include <stdio.h>  #include <stdlib.h>    typedef struct tree{         int key;         struct tree *left;         struct tree *right;     }*BiTree,Node;  //循环创建二叉树  void CreateBiTree(BiTree &T)/*DEVC++无法编译此句话,需要从vs中运行*/  {         int word;       scanf("%d",&word);       if(word==-1)//-1表示该节点下面没有左右孩子       {              T=NULL;       }       else       {    //生成当前的根节点 Node *p=(Node *) malloc (sizeof(Node));//开辟新的节点     T=p;            T->key=word;              CreateBiTree(T->left);//递归建立左子树              CreateBiTree(T->right); //递归建立右子树        }  }   //先序遍历以T为根的二叉树  void PreOrder(BiTree &T)  {       if(T)//T不为空或者根时        {              printf("%d ",T->key);//打印当前节点              PreOrder(T->left);              PreOrder(T->right);                      }  }  void InOrder(BiTree &T)  {      if(T)      {          InOrder(T->left);          printf("%d ",T->key);          InOrder(T->right);      }  }  void PostOrder(BiTree &T)  {      if(T)      {          PostOrder(T->left);          PostOrder(T->right);          printf("%d ",T->key);      }  }  // 先序遍历二叉树,以 count 返回二叉树中叶子结点的数目  void CountLeaf(BiTree &T, int &count){      if (T) {          if ((!T->left)&& (!T->right))              count++;    // 对叶子结点计数          CountLeaf( T->left, count);          CountLeaf( T->right, count);      } // if  } // CountLeaf  // T指向二叉树的根,level 为 T 所指结点所在层次,  // 其初值为1,depth 为当前求得的最大层次,其初值为0  void BiTreeDepth(BiTree T, int level, int &depth){      if (T){          if (level>depth) depth=level;          BiTreeDepth(T->left, level+1, depth);          BiTreeDepth(T->right, level+1, depth);      }  }  int main(int argc, char *argv[])  {    BiTree T;    printf("请依次输入1,2,-1,3,4,-1,-1,-1,5,-1,6,-1,-1\n");    CreateBiTree(T);    printf("先序遍历的顺序是\n");    PreOrder(T);    printf("\n中序遍历的顺序是\n");    InOrder(T);    printf("\n后序遍历的顺序是\n");    PostOrder(T);    int count=0;    CountLeaf(T,count);    printf("\n叶子节点的数量是:%d\n",count);    int depth = 0;    BiTreeDepth(T,1,depth);    printf("此二叉树深度:%d\n",depth);    system("PAUSE");      return 0;  }  


	
				
		
原创粉丝点击