我每次对于树的中序遍历、先序遍历、后续遍历都头大。
今天,我们就来探讨探讨这个二叉树递归原理到底是怎么肥事!!
我猛然发现了一个巨通俗易懂的视频,讲的特别特别好。视频链接地址:视频入口
我如果有空了也来给大家整一个视频哈哈哈哈哈,总结到此结束。
图片来自上面那个视频
注:图片中每一层表示函数的一次函数操作
v->p->left :表示节点指向p的left节点
p’表示p->left 开始执行函数
preorder(p->left)执行完全才开始退出,执行preoder(p->right)
在理解了上面视频所讲之后,下面二叉树的三种遍历就很容易懂啦。
1. 先序遍历
1. void** pre_traverse(BTree pTree)
2. {
3. **if**(pTree)
4. {
5. printf(”%c ”,pTree->data);
6. **if**(pTree->pLchild)
7. pre_traverse(pTree->pLchild);
8. **if**(pTree->pRchild)
pre_traverse(pTree->pRchild);
}
}
2.中序遍历
1. **void** in_traverse(BTree pTree)
2. {
3. **if**(pTree)
4. {
5. **if**(pTree->pLchild)
6. in_traverse(pTree->pLchild);
7. printf(”%c ”,pTree->data);
8. **if**(pTree->pRchild)
9. in_traverse(pTree->pRchild);
10. }
11. }
3.后序遍历
1. **void** beh_traverse(BTree pTree)
2. {
3. **if**(pTree)
4. {
5. **if**(pTree->pLchild)
6. beh_traverse(pTree->pLchild);
7. **if**(pTree->pRchild)
8. beh_traverse(pTree->pRchild);
9. printf(”%c ”,pTree->data);
10. } ```