码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树

时间:2014-08-12 21:46:04      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   strong   ar   2014   

二叉树相关概念:

  1. 路径:对于节点n1 n2 n3….nk从n1到nk的路径长度为k-1
  2. 节点的层数:只有一个根节点,则层数为1,其余节点的层数为双亲节点的层数加1
  3. 树的深度:树中所有节点的最大层数称为树的深度,只有根节点深度为1。
  4. 满二叉树:所有分支节点存在左子树和右子树,并且所有的叶子节点都在同一层上。
  5. 完全二叉树:对于树中的节点从上至下、从左到右顺序进行编号,且与满二叉树的位置编号相同。完全二叉树特点:叶子节点只能出现在最下层和次下层,且最下层的叶子节点集中在树的左边,满二叉树肯定是完全二叉树,反之不一定。如果完全二叉树中子节点个数分别为0、1、2的节点数分别用n0 n1 n2表示,节点总数n=n0+n1=n2,且n1只能为0或者1。

二叉树相关性质:

  1. 一颗深度为k的二叉树中,最多有2的k次方-1个节点(满二叉树),最少有k个节点
  2. 对于一颗非空二叉树,度为0的节点总是比度为2的几点多一个,即:n0=n2+1;
  3. 具有n个节点的完全二叉树的深度为【logn】+1,【】为向下取整;
  4. 对于n个节点从1开始编号的完全二叉树,对于节点编号i的节点:

    (1)如果2i<=n,则序号为i的节点的左孩子节点的序号为2i;如果2i>n,则序号为i的节点无左孩子;

       (2)如果2i+1<=n,则i节点有孩子序号为2i+1,如果2i+1>n,则i无右孩子。

                                                                                                                                                                 bubuko.com,布布扣

二叉树的遍历:

  1、先序遍历:先序遍历是先输出根节点,再输出左子树,最后输出右子树。上图的先序遍历结果就是:ABCDEF

  2、中序遍历:中序遍历是先输出左子树,再输出根节点,最后输出右子树。上图的中序遍历结果就是:CBDAEF

  3、后序遍历:后序遍历是先输出左子树,再输出右子树,最后输出根节点。上图的后序遍历结果就是:CDBFEA

#include <stdio.h> 
#include <stdlib.h> 
typedef char TelemType;         

typedef struct TNode
{     
    TelemType data;     
    struct TNode *lchild,*rchild; 
} BitNode; //声明

BitNode* createTree(void); 
void preOrderTraverse(BitNode *); 
void inOrderTraverse(BitNode *);
void lastOrderTraverse(BitNode *);

int main(int agrc,char *argv[])
{     
    BitNode *root=NULL;     
    root=createTree();       
    printf("\n先序遍历二叉树:");     
    preOrderTraverse(root);     
    printf("\n中序遍历二叉树:");     
    inOrderTraverse(root);    
    printf("\n后序遍历二叉树:");    
    lastOrderTraverse(root);          
    return 0; 
}

//创建二叉树 
BitNode* createTree(void)
{     
    BitNode *b;     
    TelemType ch;     
    scanf("%c",&ch);     
    if(ch==#)
    {        
        b=NULL;     
    }
    else
    {         
        b=(BitNode *)malloc(sizeof(BitNode));
        b->data=ch;
        b->lchild=createTree();
        b->rchild=createTree();
    }             
    return b;
}  

//先序遍历 
void preOrderTraverse(BitNode *root)
{     if(root)
    {         
        printf("%c",root->data);
        preOrderTraverse(root->lchild);
        preOrderTraverse(root->rchild); 
    } 
}

//中序遍历 
void inOrderTraverse(BitNode *root)
{     
    if(root)
    {         
        inOrderTraverse(root->lchild);
        printf("%c",root->data);
        inOrderTraverse(root->rchild);
    } 
}         

//后序遍历 
void lastOrderTraverse(BitNode *root)
{     
    if(root)
    {         
        lastOrderTraverse(root->lchild);
        lastOrderTraverse(root->rchild);
        printf("%c",root->data);     
    } 
}

 输出结果如下图:

bubuko.com,布布扣

二叉树,布布扣,bubuko.com

二叉树

标签:style   blog   http   color   io   strong   ar   2014   

原文地址:http://www.cnblogs.com/mu-tou-man/p/3908350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!