【数据结构初阶】二叉树的前中后序构建
前中后序简介
二叉树的遍历主要有三种:
(1)先(根)序遍历(根左右)
(2)中(根)序遍历(左根右)
(3)后(根)序遍历(左右根) 图例:
前:ABDECFG 中:DBEAFCG 后:DEBFGCA
代码实现
对树的构建并不是每一个树都是满二叉树也会有NULL;当我们创建树的时候要想到NULL的这一结点,我们将树的数据想成无限长的数组,通过指针pi的++来存下一个数据。 没来一个数据就创建一个树结点(结构体),当树为空树时候判断直接返回NULL,还有一种是叶结点++pi返回给NULL值。 如果不是NULL进入else,通过之前的介绍前序(根-左-右)当存入一个数据时候pi要++准备下一个数据存入。不然就会覆盖 覆盖 覆盖。 前序:
BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi); { if (a[*pi] == #||*pi>=n)//#代表NULL { (*pi)++; return NULL; } else BTNode* root = (BTNode*)malloc(sizeof(BTNode)); root->_data = a[*pi]; (*pi)++; root->_left = BinaryTreeCreate(a, n, pi); root->_right = BinaryTreeCreate(a, n, pi); return root; }
后序:
root->_left = BinaryTreeCreate(a, n, pi); root->_+right = BinaryTreeCreate(a, n, pi); root->_data = a[*pi]; (*pi)++;
中序:
root->_left = BinaryTreeCreate(a, n, pi); root->_data = a[*pi]; (*pi)++; root->_+right = BinaryTreeCreate(a, n, pi);