非线性结构——树

来源:互联网 发布:华为手机网络诊断 编辑:程序博客网 时间:2024/06/05 00:37

二叉树的深度

求解二叉树的深度比较简单,只要分别计算出左、右子树的深度,然后取较大者加1即为二叉树的深度。

直接上代码:

/* * 二叉树的深度  */int PostTreeDepth(BiTree root){int leftheight, rightheight, max;if(root != NULL){leftheight = PostTreeDepth(root->lchild);rightheight = PostTreeDepth(root->rchild);max = leftheight>rightheight?leftheight:rightheight;return (max+1);}else    return 0;}
之后贴上二叉树的前、中、后序遍历:

#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OVERFLOW -2#define OK 1#define ERROR 0typedef int Status;typedef int TElemType;/* * 存储结构 */typedef struct BiTNode{    TElemType data;    struct BiTNode *lchild, *rchild;}BiTNode, *BiTree;/* * 创建二叉树,输入0表示创建空树 */Status CreateBiTree(BiTree *T){    TElemType e;    scanf("%d", &e);    if (e == 0)    {        *T = NULL;    }    else    {        *T = (BiTree) malloc(sizeof(BiTNode));        if (!T)        {            exit(OVERFLOW);        }        (*T)->data = e;        CreateBiTree(&(*T)->lchild);    //创建左子树        CreateBiTree(&(*T)->rchild);    //创建右子树    }    return OK;}/* * 访问元素 */void visit(TElemType e){    printf("%d ", e);}/* * 先序遍历二叉树:指先访问根,然后访问孩子的遍历方式 */Status PreOrderTraverse(BiTree T, void (*visit)(TElemType)){    if (T)    {        visit(T->data);        PreOrderTraverse(T->lchild, visit);        PreOrderTraverse(T->rchild, visit);    }}/* * 中序遍历二叉树:指先访问左(右)孩子,然后访问根,最后访问右(左)孩子的遍历方式 */Status InOrderTraverse(BiTree T, void (*visit)(TElemType)){    if (T)    {        InOrderTraverse(T->lchild, visit);        visit(T->data);        InOrderTraverse(T->rchild, visit);    }}/* * 后序遍历二叉树:指先访问孩子,然后访问根的遍历方式 */Status PostOrderTraverse(BiTree T, void (*visit)(TElemType)){    if (T)    {        PostOrderTraverse(T->lchild, visit);        PostOrderTraverse(T->rchild, visit);        visit(T->data);    }}/* * 二叉树的深度  */int PostTreeDepth(BiTree root){int leftheight, rightheight, max;if(root != NULL){leftheight = PostTreeDepth(root->lchild);rightheight = PostTreeDepth(root->rchild);max = leftheight>rightheight?leftheight:rightheight;return (max+1);}else    return 0;}int main(){    BiTree T;    printf("创建树,输入0为空树:\n");    CreateBiTree(&T);    printf("先序遍历:");    PreOrderTraverse(T, *visit);    printf("\n中序遍历:");    InOrderTraverse(T, *visit);    printf("\n后序遍历:");    PostOrderTraverse(T, *visit);    printf("\n树的深度:%d", PostTreeDepth(T));        return 0;}

原创粉丝点击