C语言:如何用递归的方法层序遍历一棵二叉树?

发布于 2022-09-13 00:59:34 字数 513 浏览 19 评论 0

层序遍历使用递归,请求大佬描述一下详细思路,或者提供伪代码,感激不尽!

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT  10

typedef int status;
typedef int ElemType;
typedef int KeyType;
//数据元素类型定义

typedef struct {
    //二叉树结点类型定义
    KeyType  key;
    char others[20];
} TElemType;

typedef struct BiTNode {
    //二叉链表结点的定义
    TElemType  data;
    struct BiTNode* lchild, * rchild;
} BiTNode, * BiTree;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

话少心凉 2022-09-20 00:59:34

有个思路,就是给每个节点增加一个指向下一个兄弟节点的指针。然后访问的时候从根开始,向下遍历所有左孩子,对于每一个左孩子,递归遍历它的下一个兄弟节点。

麻烦的地方在于建立树的时候,要设置好指向下一个兄弟节点的指针。

茶底世界 2022-09-20 00:59:34

可以用BFS,虽然不符合题目中递归的条件

BiTNode* q[TREE_SIZE];
q[0]=Root;
int head=0,tail=1;
while(head!=tail){
    BiTNode* u=q[head++];
    if(u->lchild) q[tail++]=u->lchild;
    if(u->rchild) q[tail++]=u->rchild;
}
// 此时q内即为答案

非要递归的话,可以给BiTNode增加一个成员depth,递归计算,然后用类似桶排的东西输出(?)总之感觉很难受

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文