关键
- 顺序存储使用数组,同时顺序存储需要知道节点数n,使用length存储n
- 对于某个节点,2n左子节点,2n+1右子节点,n/2父节点。
- 对于第二点结论,如果对应数组下表从0开始,那么都需要加1。也就是,2n+1左子节点,2n+2右子节点,(n+1)/2父节点。
代码
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef int ElemType;
typedef struct TreeNode
{
ElemType value;
bool isEmpty;
}TreeNode;
typedef struct Tree_t
{
TreeNode arr[MAXSIZE];
int length;
}Tree_t;
void init(Tree_t& root, ElemType arr[], int n)
{
//赋初值
for (int i = 0; i < MAXSIZE; i++)
{
root.arr[i].value = -1;
root.arr[i].isEmpty = true;
}
//按输入赋值
for (int i = 0; i < n; i++)
{
root.arr[i].value = arr[i];
root.arr[i].isEmpty = false;
}
root.length = n;
}
void preOrder(Tree_t root, int index)//先序遍历
{
if (&root == NULL || root.length == 0)
return;
if (!root.arr[index].isEmpty)
cout << root.arr[index].value << endl;
if (2 * index + 1 < root.length)
preOrder(root, 2 * index + 1);
if(2 * index + 2 < root.length)
preOrder(root, 2 * index + 2);
}
int main()
{
ElemType arr[] = { 1, 2, 3, 4, 5, 6, 7 };
Tree_t root;//二叉树的顺序存储
init(root, arr, 7);
preOrder(root, 0);
}
鄙人的数据结构和算法刷题笔记:github仓库,欢迎访问,如果能给个star就不胜感激啦!