(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)
目录
创建二叉树 (http://t.csdn.cn/qgzDU)
初识遍历:
特点:
按某条搜索路线遍访每个结点且不重复(又称周游)
作用:
它是树结构插入、删除、修改、查找和排序运算的前提,是二叉树一切运算的基础和核心
创建二叉树 (http://t.csdn.cn/qgzDU)
遍历二叉树:
前序遍历:
若二叉树为空,则空操作;否则
1.访问根结点
2.前序遍历左子树
3.前序遍历右子树
特点:第一位一定是根节点
如下图所示:从根结点A开始,先遍历左子树B,然后再遍历B的左子树D,因为D没有左右子树,所以返回B点,遍历B的右子树E,遍历完A的左子树B后开始遍历A的右子树C (根-左-右)
/** 前序遍历:也叫做先根遍历、先序遍历、前序周游。可以记做根-左-右 */ void PreOrderTraverse(TreeNode* node) { //先访问根结点,然后遍历左子树,最后遍历右子树 if (node) { printf("[%d, %s]-", node->data.id, node->data.name); PreOrderTraverse(node->left); PreOrderTraverse(node->right); } }
中序遍历:
若二叉树为空,则空操作;否则
1.中序遍历左子树
2.访问根结点
3.中序遍历右子树
特点:根节点必在中间
如下图所示:先访问最左边的结点,然后访问相应的根结点,最后访问右结点(左-根-右)
/** 中序遍历:也叫做中根遍历、中序周游。左-根-右 */ void InOrderTraverse(TreeNode* node) { if (node) { InOrderTraverse(node->left); printf("[%d, %s]-", node->data.id, node->data.name); InOrderTraverse(node->right); } }
后序遍历:
若二叉树为空,则空操作;否则
后序遍历左子树
后序遍历右子树
访问根结点
特点:最后一位一定是根节点
如下图所示:先访问左结点,在访问右结点,最后访问根结点(左-右-根)
/** 后序遍历:也叫做后根遍历、后序周游。左-右-根 */ void PostOrderTraverse(TreeNode* node) { if (node) { PostOrderTraverse(node->left); PostOrderTraverse(node->right); printf("[%d, %s]-", node->data.id, node->data.name); } }