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); }