1.二叉树的链式存储
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是 链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所 在的链结点的存储地址 。链式结构又分为二叉链和三叉链。
2.二叉树链式结构的实现
2.1树的创建
手动快速创建一棵简单的二叉树
typedef int BTDataType;
typedef struct BinaryTreeNode
{
BTDataType _data;
struct BinaryTreeNode* _left;
struct BinaryTreeNode* _right;
}BTNode;
BTNode* CreatBinaryTree()
{
BTNode* node1 = BuyNode(1);
BTNode* node2 = BuyNode(2);
BTNode* node3 = BuyNode(3);
BTNode* node4 = BuyNode(4);
BTNode* node5 = BuyNode(5);
BTNode* node6 = BuyNode(6);
node1->_left = node2;
node1->_right = node4;
node2->_left = node3;
node4->_left = node5;
node4->_right = node6;
return node1;
}
注意:上述代码并不是创建二叉树的方式,真正创建二叉树方式后序详解重点讲解
2.2二叉树的再理解
二叉树是: 1. 空树 2. 非空:根节点,根节点的左子树、根节点的右子树组成的。
3.链式结构二叉树的遍历
二叉树的遍历
二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉 树中的节点进行相应的操作,并且每个节点只操作一次。
二叉树的遍历有:前序/中序/后序的递归结构遍历:
- 1. 前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。根--左子树-右子树
- 2. 中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。左子树--根--右子树
- 3. 后序遍历(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。左子树---右子树--根
3.1前序遍历实现:
//前序遍历
void PrevOrder(BTNode* root)
{
if (root == NULL)
{
printf(" null ");
return;
}
//不为空打印节点内容
printf("%d ", root->val);
//遍历每个节点的左子树
PrevOrder(root->left);
//遍历每个节点的右子树
PrevOrder(root->right);
}
3.2后序遍历实现
//中序遍历 void Inrder(BTNode* root) { if (root == NULL) { printf(" null "); return; } //遍历每个节点的左子树 Inrder(root->left); //不为空打印节点内容 printf("%d ", root->val); //遍历每个节点的右子树 Inrder(root->right); }