二叉树板子

二叉树

数组存储

二叉树采用数组存储用下标访问结点,存储方式为按层存储。

数组下标从0开始:若某节点下标为i,则其父节点下标为 ⌊ ( i − 1 ) / 2 ⌋ \lfloor (i-1)/2 \rfloor ⌊(i1)/2,左子节点下标为 2 ∗ i + 1 2*i+1 2i+1,右子节点下标为 2 ∗ i + 2 2*i+2 2i+2

数组下标从1开始:若某节点下标为i,则其父节点下标为 ⌊ i / 2 ⌋ \lfloor i/2 \rfloor i/2,左子节点下标为 2 ∗ i 2*i 2i,右子节点下标为 2 ∗ i + 1 2*i+1 2i+1

//二叉树板子(数组)
#include
#define N 101 //假设有100个结点,此处以根节点下标为1的方案为例,浪费一个空间
typedef struct tree{
    int data,left,right;
}node;
node tree[N];
void intitree(){
    for(int i=0;i<N;i++){
        tree[i].data=-1;
    }
}
void xianxu(int index){//先序遍历,在主调函数中调用时实参填1
    if(index<N){
        printf("%d",tree[index].data);
        xianxu(tree[index].left);
        xianxu(tree[index].right);
    }
}
void zhongxu(int index){//中序遍历
    if(index<N){
        zhongxu(tree[index].left);
        printf("%d",tree[index].data);
        zhongxu(tree[index].right);
    }
}
void houxu(int index){//后序遍历
    if(index<N){
        houxu(tree[index].left);
        houxu(tree[index].right);
        printf("%d",tree[index].data);
    }
}
void cengxu(int index){//层序遍历
    if(index==N) return;
    else{
        printf("%d",tree[index].data);
        cengxu(index+1);
    }
}

二叉链表存储

#include
#include
typedef struct tree{//使用二叉链表存储二叉树
    struct tree *left;
    int data;
    struct tree *right;
}node;
void create(node *root){//根据扩展二叉树的方式建树

}
void previsit(node *root){//先序遍历(本质:DFS)
    if(root==NULL) return;
    else{
        printf("%d",root->data);
        previsit(root->left);
        previsit(root->right);
    }
}
void invisit(node *root){//中序遍历(本质:DFS)
    if(root==NULL) return;
    else{
        invisit(root->left);
        printf("%d",root->data);
        invisit(root->right);;
    }
}
void aftervisit(node *root){//后序遍历(本质:DFS)
    if(root==NULL) return;
    else{
        aftervisit(root->left);
        aftervisit(root->right);
        printf("%d",root->data);
    }
}
void levelvisit(node *root){//层序遍历(本质:BFS)
    
}

你可能感兴趣的:(板子,学习心得,数据结构,算法,c语言,c++,青少年编程)