后序遍历和层序遍历
上一篇博文中已经通过该死的递归把二叉树通过前序和中序序列给重建出来了,当然我们应该来应用这可二叉树,以便验证我们建立的效果。
当然,善于实践的你可能已经知道了上篇博文中的代码不能直接运行,因为里面还有其他的一些函数没有定义而只是给出了声明。如:
这两个函数是实现了后序遍历打印和层序遍历打印的功能,下面给出简要的阐述:
后序打印二叉树函数定义:
我们不禁感叹递归真是强大!简单几行代码就可以遍历到一棵二叉树的所有节点,逻辑实在是简单的让我无话可说:
当前节点不是nullptr,我们看他的左节点是否存在,不为nullptr,我们继续看左节点,直到是nullptr,我们是后序,不应该先输出root,接下来有先看右节点了!
层序打印二叉树的函数定义:
嗯,层序遍历一棵二叉树,听起来似乎很难实现,不过借助一个队列的数据结构,好像变得简单了,甚至不需要递归!
对,不需要自己实现队列了(你想自己实现,我双手鼓励)。我们首先把根节点进入队列,并且我们还要看看这个根的下一层是否存在,存在我们继续然他们进入队列,然后每次循环把队列的排头弹出并输出。整个循环让他自生自灭吧,他真的会把所有的节点数据按照扫描的方式根打印出来。
下面我给出这两个函数的定义,供大家测试:
void PrintBinTreeByPostOrder(BIN_NODE *subTree) {
//递归算法后序遍历打印以subTree为根的二叉树
if (subTree != nullptr) {
PrintBinTreeByPostOrder(subTree->leftChild);
PrintBinTreeByPostOrder(subTree->rightChild);
std::cout << subTree->data;
}
}