基于二叉树的递归遍历算法分析(先,中,后)
基本原理:
通过不断判断当前节点的状态,确定是否执行函数,然后依次判断左右孩子的状态进行递归遍历;
算法分析:
先序:
第一:判断当前节点的状态,如果当前节点存在,则进入二,三,四;
第二:访问该节点;
第三:判断该节点是否存在左孩子,如果存在,则以左孩子为参数递归调用该函数;
第四:判断该节点是否存在右孩子,如果存在,则以右孩子为参数递归调用该函数;
中序:
将先序中的第二步放到第三步后面;
后序:
将先序中的第二步放到第四步后面;
代码展示:
void preorder_traverse(bitree t)//先序输出二叉树
{
if (t) { //判断t是否为叶子节点
cout << t->data << " "; //输出该节点
if (t->lchild) preorder_traverse(t->lchild); //判断是否存在左孩子,存在即递归左孩子
if (t->rchild) preorder_traverse(t->rchild); //判断是否存在右孩子,存在即递归右分子
}
}
void preorder_traverse(bitree t)//中序输出二叉树
{
if (t) { //判断t是否为叶子节点
if (t->lchild) preorder_traverse(t->lchild); //判断是否存在左孩子,存在即递归左孩子
cout << t->data << " "; //输出该节点
if (t->rchild) preorder_traverse(t->rchild); //判断是否存在右孩子,存在即递归右分子
}
}
void preorder_traverse(bitree t)//后序输出二叉树
{
if (t) { //判断t是否为叶子节点
if (t->lchild) preorder_traverse(t->lchild); //判断是否存在左孩子,存在即递归左孩子
if (t->rchild) preorder_traverse(t->rchild); //判断是否存在右孩子,存在即递归右分子
cout << t->data << " "; //输出该节点
}
}
专心看人间!
浙公网安备 33010602011771号