3.10 基础学习:树、二叉树

2019-03-23  本文已影响0人  Aurochsy

Chapter3: 更好的查找与排序算法

10. 基础学习:树、二叉树

用数组来表示一棵树

结构分为逻辑结构和物理结构(或存储结构)

存储结构只有两种:顺序存储和和链式存储

用数组来表示1棵树,可以按照从上到下,从左到右的顺序给树编号,这样结点i 的左子结点下标为 2i+1 , 右子结点下标为 2i+2 ,如果其范围超出了数组长度,说明它没有对应的子结点;其父结点为 [(i-1)/2] (实际上整数除法也是下取整) 。

树的遍历方式

树的遍历方式有:

"序" 可以理解为 "跟","先序"即 "先跟","中序"即"中根","后序"即"后根"。

如对于下面这棵树:

一棵二叉树

树的遍历方式的代码

先序遍历

/*递归形式的中序遍历
参数:输入数组,数组长度,当前访问子树根结点索引*/
void inOrder(int*arr,int arrLen,int i){
    if(i>arrLen)
        return;
    printf("%d",arr[i]);//根结点
    preOder(arr,arrLen,arr[i*2+1]);//左子树
    preOrder(arr,arrLen,arr[i*2+2]);//右子树
}

中序遍历

/*递归形式的中序遍历
参数:输入数组,数组长度,当前访问子树根结点索引*/
void preOrder(int*arr,int arrLen,int i){
    if(i>arrLen)
        return;
    printf("%d",arr[i*2+1]);//左子树
    preOder(arr,arrLen,arr[i]);//根结点
    preOrder(arr,arrLen,arr[i*2+2]);//右子树
}
上一篇 下一篇

猜你喜欢

热点阅读