二叉树

二叉树性质:

  1. 二叉树第i层至多有pow(2,i-1)个节点;
  2. 深度为k的二叉树最多有pow(2,i)-1个节点
  3. n=n0+n1+n2;n-1=n1*2n2;------->n0=n2+1;
  4. 具有n个节点的深度为pow(log2,n)+1
  5. i=0,左孩子为2i+1,右孩子为2i+2;i=1,左孩子为2i,右孩子为2i+1

层序存储,先序存储,先中后序遍历

#include <bits/stdc++.h>
using namespace std;

typedef char ElemType;
#define MaxSize 100
//二叉链表的结构创建 
typedef struct BiTNode{
    ElemType data;
    struct BiTNode *lchild;
    struct BiTNode *rchild;
}BiTNode,*BiTree;
//层序遍历的方式创建二叉树 
string tree;
CreateTreeSeqTraverse(BiTree &T,int i,int n){
    if(i>=n||i<0) T=NULL;
    else{
        T=(BiTree)malloc(sizeof(BiTNode));
        if(!T) return 0;
        T->data=tree[i];  
        CreateTreeSeqTraverse(T->lchild,2*i+1,n);
        CreateTreeSeqTraverse(T->rchild,2*i+2,n);
    } 
} 
//前序创建二叉树 
CreateTreePreTraverse(BiTree &T){
    char c;
    scanf("%c",&c);
    if(c=='#') T=NULL;
    else{
        T=(BiTree)malloc(sizeof(BiTNode));
        if(!T) return 0;
        T->data=c;  
        CreateTreePreTraverse(T->lchild);
        CreateTreePreTraverse(T->rchild);
    } 
} 
//前序遍历
void PreOrderTraverse(BiTree T){
    if(T==NULL) return;
    printf("%c ",T->data);
    PreOrderTraverse(T->lchild);
    PreOrderTraverse(T->rchild);
}
//中序遍历
void OrderTraverse(BiTree T){
    if(T==NULL) return;
    OrderTraverse(T->lchild);
    printf("%c ",T->data);
    OrderTraverse(T->rchild);
} 
//后序遍历
void PosOrderTraverse(BiTree T){
    if(T==NULL) return;
    PosOrderTraverse(T->lchild);
    PosOrderTraverse(T->rchild);
    printf("%c ",T->data);
}  
int main(){
    BiTree T;
    getline(cin,tree);
    CreateTreeSeqTraverse(T,0,tree.length());
    PosOrderTraverse(T);
}

 

posted @ 2021-11-13 20:33  不负韶华。  阅读(17)  评论(0编辑  收藏  举报