#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; }