赞
踩
首先,先了解一下什么是二叉树的遍历。
接下来,我们就来具体分析前中后序遍历,以及其代码实现。
要注意的是,二叉树有许多地方都要用到递归的思想。要把二叉树分为根、左子树、右子树,再把左子树、右子树看作一个二叉树,分为根、左子树、右子树,把一个大的二叉树分为N个小二叉树,直至不可再分。充分的利用了递归的思想,将一个大问题,变为N个小的子问题,将其分至不可再分割。
用代码实现非常简单,但如果不了解递归,就会十分难以理解。
我们以前序遍历的代码举例。要实现它,要用递归,所以,首先我们要找到递归的终止条件。当递归至叶子节点时,其左右子树都为空,把其左右子树当作一个二叉树,其为根节点,所以,递归的终止条件是其根节点为空,接着就开始往回返时,就会不断访问其父节点,不断打印。
- //前序遍历
- void PrevOrder(BTNode* root)
- {
- if (root == NULL)
- {
- printf("NULL ");
- return;
- }
- printf("%c ", root->data);
- PrevOrder(root->left);
- PrevOrder(root->right);
- }
这个视频转动图太不容易了,没会员只能搞了模糊的,所以这个将就看一下(因为没会员,所以只能撮合用了),代码就是前序遍历的代码,重要的是理解递归的过程。
中序遍历、后序遍历与前序类似
- //中序遍历
- void InOrder(BTNode* root)
- {
- if (root == NULL)
- {
- printf("NULL ");
- return;
- }
- InOrder(root->left);
- printf("%c ", root->data);
- InOrder(root->right);
- }
- //后序遍历
- void NextOrder(BTNode* root)
- {
- if (root == NULL)
- {
- printf("NULL ");
- return;
- }
- NextOrder(root->left);
- NextOrder(root->right);
- printf("%c ", root->data);
- }
使用递归时,一定要多思考,多画图,理清思路,因为一旦牵扯到递归,解释起来就不会那么容易,我尽力了,大家加油。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。