zoukankan      html  css  js  c++  java
  • 经典二叉树

    完全二叉树特点:
    1 叶子节点只能出现在最下面两层
    2 最下层的叶子一定集中在左部连续位置
    3 倒数第二层,如果有叶子节点,一定都集中在右边
    4 如果节点度为1,则该节点只有做孩子
    5 同样节点数的二叉树,完全二叉树深度最小
     
    性质1:在二叉树的第i层上至多有2的(i-1)次幂个节点
    性质2:深度为k的二叉树最多有2的k-1次幂个节点
    性质3:叶子节点数为m,度为2的节点数为n,那么 m=n+1
    性质4:具有n个节点的完全二叉树深度为[log2n]+1
    性质5:如果节点i的两个孩子是2i和2i+1
     

    遍历方式

    前序遍历
    void PreOrderTree(BiTree *b){
        if( b == NULL)
            return;
        printf("%c",b->data);
        PreOrderTree(b->lchild);
        PreOrderTree(b->rchild);
    }

    中序遍历

    void InOrderTree(BiTree *b){
        if( b == NULL)
            return ;
        InOrderTree(b->lchild);
        printf("%c",b->data);
        InOrderTree(b->rchild);
    }

    后序遍历

    void PostOrderTree(BiTree *b){
        if( b == NULL)
            return ;
        PostOrderTree(b->lchild);
        PostOrderTree(b->rchild);
        printf("%c",b->data);
    }

    全部代码

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 typedef struct BiTree{
     4     int data;
     5     struct BiTree * lchild,*rchild;
     6 }BiTree;
     7 
     8 void initTree(BiTree *b);
     9 void PreOrderTree(BiTree *b);
    10 void InOrderTree(BiTree *b);
    11 void PostOrderTree(BiTree *b);
    12 
    13 int main()
    14 {
    15     BiTree *b = (BiTree *)malloc(sizeof(BiTree));
    16     initTree(b);
    17     PreOrderTree(b);
    18     printf("
    ");
    19     InOrderTree(b);
    20     printf("
    ");
    21     PostOrderTree(b);
    22     printf("
    ");
    23     free(b);
    24     return 0;
    25 }
    26 void initTree(BiTree *b){
    27     b->data = 'A';
    28     BiTree *b1 = (BiTree *)malloc(sizeof(BiTree));
    29     b->lchild = b1;
    30     b1->data = 'B';
    31 
    32     BiTree *b2 = (BiTree *)malloc(sizeof(BiTree));
    33     b->rchild = b2;
    34     b2->data = 'C';
    35 
    36     BiTree *b3 = (BiTree *)malloc(sizeof(BiTree));
    37     b1->lchild = b3;
    38     b3->data = 'D';
    39 
    40     BiTree *b4 = (BiTree *)malloc(sizeof(BiTree));
    41     b1->rchild = b4;
    42     b4->data = 'E';
    43     b4->lchild = NULL;
    44     b4->rchild = NULL;
    45 
    46     BiTree *b5 = (BiTree *)malloc(sizeof(BiTree));
    47     b2->lchild = b5;
    48     b5->data = 'F';
    49     b5->lchild = NULL;
    50     b5->rchild = NULL;
    51 
    52     BiTree *b6 = (BiTree *)malloc(sizeof(BiTree));
    53     b2->rchild = b6;
    54     b6->data = 'G';
    55     b6->lchild = NULL;
    56     b6->rchild = NULL;
    57 
    58     BiTree *b7 = (BiTree *)malloc(sizeof(BiTree));
    59     b3->lchild = b7;
    60     b7->data = 'H';
    61     b7->lchild = NULL;
    62     b7->rchild = NULL;
    63 
    64     BiTree *b8 = (BiTree *)malloc(sizeof(BiTree));
    65     b3->rchild = b8;
    66     b8->data = 'I';
    67     b8->lchild = NULL;
    68     b8->rchild = NULL;
    69 }
    70 void PreOrderTree(BiTree *b){
    71     if( b == NULL)
    72         return;
    73     printf("%c",b->data);
    74     PreOrderTree(b->lchild);
    75     PreOrderTree(b->rchild);
    76 }
    77 
    78 void InOrderTree(BiTree *b){
    79     if( b == NULL)
    80         return ;
    81     InOrderTree(b->lchild);
    82     printf("%c",b->data);
    83     InOrderTree(b->rchild);
    84 }
    85 
    86 void PostOrderTree(BiTree *b){
    87     if( b == NULL)
    88         return ;
    89     PostOrderTree(b->lchild);
    90     PostOrderTree(b->rchild);
    91     printf("%c",b->data);
    92 }

    运行结果

  • 相关阅读:
    Python的集合和元组
    Python之 string 和 random方法
    Python文件读取常用方法
    Python文件读写之r+/w+/a+
    Python非空即真,非零即真
    【转】Python字符串格式化
    HTML5新增的form属性简介——张鑫旭
    CSS3选择器:nth-child和:nth-of-type之间的差异——张鑫旭
    CSS页面重构“鑫三无准则”之“无图片”准则——张鑫旭
    CSS垂直翻转/水平翻转提高web页面资源重用性——张鑫旭
  • 原文地址:https://www.cnblogs.com/xing901022/p/3536078.html
Copyright © 2011-2022 走看看