赞
踩
二叉链是链式结构的一种用链表来表示一棵二叉树,即用链来指示元素的逻辑关系,链表中每个结点由三个域组成,数据域和左右指针域,左指针指向该节点的左孩子,右指针指向该节点的右孩子。
- typedef int BTDataType;
- typedef struct BinaryTreeNode
- {
- BTDataType data; //数据域
- struct BinaryTreeNode* left; //指向左孩子
- struct BinaryTreeNode* right; //指向右孩子
- }BTNode;
所谓二叉树遍历是按照某种特定的规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次。
二叉树的遍历有以下4种方式
前序遍历:先遍历根、在遍历左子树、最后在遍历右子树
- // 二叉树前序遍历: 根、左子树、右子树
- void PreOrder(BTNode* root)
- {
- if (root == NULL)
- {
- printf("NULL ");
- return;
- }
- printf("%d ", root->data);
- PreOrder(root->left);
- PreOrder(root->right);
- }
中序遍历:先遍历左子树、在遍历根、最后在遍历右子树
- // 二叉树中序遍历: 左子树、根、右子树
- void InOrder(BTNode* root)
- {
- if (root == NULL)
- {
- printf("NULL ");
- return;
- }
- InOrder(root->left);
- printf("%d ", root->data);
- InOrder(root->right);
- }
后序遍历:先遍历左子树、在遍历右子树、最后在遍历根
- // 二叉树后序遍历: 左子树、右子树、根
- void PostOrder(BTNode* root)
- {
- if (root == NULL)
- {
- printf("NULL ");
- return;
- }
- PostOrder(root->left);
- PostOrder(root->right);
- printf("%d ", root->data);
- }
层序遍历:一层一层的遍历
- / 层序遍历 --- 队列实现
- //先入根节点,在出根结点,如果根节点的左右子树都不为空就入队列
- void LevelOrder(BTNode* root)
- {
- Queue q;
- QueueInit(&q);
- //将根节点入队列
- if (root != NULL)
- {
- QueuePush(&q, root);
- }
- while (!QueueEmpty(&q))
- {
- BTNode* front = QueueFront(&q);
- QueuePop(&q);
- //出层序数据
- printf("%d ", front->data);
- //左右子树判空
- if (front->left != NULL)
- {
- QueuePush(&q, front->left);
- }
- if (front->right != NULL)
- {
- QueuePush(&q, front->right);
- }
- }
- QueueDestroy(&q);
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。