您的位置:首页 > 其它

二叉树的遍历

2016-07-22 00:05 204 查看
二叉树,顾名思义就是一棵根节点最多只有两个子节点(即左孩子与右孩子);今天主要讲的是二叉树的遍历,二叉树的遍历主要按次序遍历分为:前序遍历、中序遍历、后序遍历与层序遍历;如图:



首先,在此先声明一下,这四种二叉树的遍历都是利用了函数的递归方法来进行遍历的;我觉得前三种的遍历方式都是按照判断左右孩子是否存在、根节点打印输出时的位置来进行遍历的;

前序遍历:

遍历顺序是按照:先打印根节点->判断左孩子是否存在->判断右孩子是否存在;

void f(Bitree T)
{
if(T==NULL)
return ;
printf("%c",T->data);//打印根节点;
f(T->lchirld);       //判断左子树是否存在;
f(T->rchirld);       //判断右子树是否存在;
}




该二叉树的前序遍历的顺序为:ABDECF

中序遍历:

遍历顺序是按照:判断左孩子是否存在->打印根节点->判断右孩子是否存在;

void f(Bitree T)
{
if(T==NULL)
return ;
f(T->lchirld);       //判断左子树是否存在;
printf("%c",T->data);//打印根节点;
f(T->rchirld);       //判断右子树是否存在;
}




该二叉树的前序遍历的顺序为:DBEACF

后序遍历:

遍历顺序是按照:判断左孩子是否存在->判断右孩子是否存在->打印根节点;

void f(Bitree T)
{
if(T==NULL)
return ;
f(T->lchirld);       //判断左子树是否存在;
f(T->rchirld);       //判断右子树是否存在;
printf("%c",T->data);//打印根节点;
}




该二叉树的前序遍历的顺序为:DEBFCA

层序遍历:

层序遍历顾名思义就是逐层遍历;



该二叉树的遍历为:ABCDEF

总结:任意二叉树的遍历都是利用函数的递归的方法进行遍历的;且任意的二叉树的遍历都是从根节点出发的,至于根节点的打印输出顺序由遍历的方式所决定的;从代码片中可以看出,二叉树的遍历顺序由根节点的打印输出有关。

二叉树遍历的应用:

问题例如:已知一棵二叉树的前序遍历次序与中序遍历的次序,求后序遍历的次序?

*有关二叉树的遍历的两条性质:

1.已知二叉树的前序遍历与中序遍历,可确认一棵二叉树;

2.已知二叉树的中序遍历与后序遍历,可确认一棵二叉树;*

但是,已知前序遍历与后序遍历,不能确认一棵二叉树!

例如,已知前序遍历为:ABC,后序遍历为:CBA,

可生成如图的二叉树:



END…..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 递归 遍历