二叉树,顾名思义就是一棵根节点最多只有两个子节点(即左孩子与右孩子);今天主要讲的是二叉树的遍历,二叉树的遍历主要按次序遍历分为:前序遍历、中序遍历、后序遍历与层序遍历;如图:
首先,在此先声明一下,这四种二叉树的遍历都是利用了函数的递归方法来进行遍历的;我觉得前三种的遍历方式都是按照判断左右孩子是否存在、根节点打印输出时的位置来进行遍历的;
前序遍历:
遍历顺序是按照:先打印根节点->判断左孩子是否存在->判断右孩子是否存在;
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…..