爱问知识人 爱问教育 医院库

多叉树怎么用递归遍历?

首页

多叉树怎么用递归遍历?

多叉树怎么用递归遍历?用数组保存节点可以么?

提交回答
好评回答
  • 2018-04-07 07:28:15
    可以的,每个节点保存为一个数组,数组名即节点名,数组内的元素为它的子节点,又各自保存在自己的数组里。最后计算树的深度。

    刘***

    2018-04-07 07:28:15

其他答案

    2018-04-07 10:28:15
  • 可以的( 如果我的回答对你有用请点击有用 )

    迩***

    2018-04-07 10:28:15

  • 2018-04-07 06:28:15
  • 1从根出发2.寻找含有子叶的节点3.找到后,正序push到堆栈4.取栈定节点,继续执行第2步4.直到找到没有子叶的节点5.开始处理,保存处理的节点指针6.pop节点, Go Setp 2

    匿名

    2018-04-07 06:28:15

  • 2018-04-07 05:28:15
  • 可以的。(如果我的回答对您有用,麻烦点击下面的有用,谢谢*^_^*)

    匿名

    2018-04-07 05:28:15

  • 2018-04-07 04:28:15
  •   温馨提示:您好,感谢您使用微问,(如果能帮到你,请猛戳“有用”)给的是3叉树,可以自己改MAX_CHILDREN_NUM 3 //三叉树
    输入节点,然后分别建底下的各个孩子,注意,每个孩子都要求输入数据,没有则输入0。反正建树很烦
    #include 
    #include 
    #include 
    #include 
    #define MAX_DEPTH 4
    #define MAX_CHILDREN_NUM 3 //三叉树
    typedef struct tnode
    {
        int data;
        tnode **children, *parent; //parent域可不要
    }tnode;
    typedef    struct
    {
        tnode* ptr;
        int cur;//cur记录当前访问到的孩子节点下标
        bool visited; //是否被访问标记
    }snode;
    typedef struct
    {
        snode *elem;
        int top;
    }stack;
    void initstack(stack *s)
    {
        s->elem=(snode*)malloc(
            (int)pow(MAX_CHILDREN_NUM,MAX_DEPTH)*sizeof(snode));
        s->top = 0;
    }
    void pop(stack *s, snode *e)
    {
        --s->top;
        *e = s->elem[s->top];
    }
    void push(stack *s, snode *e)
    {
        s->elem[s->top] = *e;
        ++s->top;
    }
    void create(tnode **t, tnode *parent)
    {
        int n;
        scanf("%d", &n);
        if(!n)
     {
      *t = NULL;
      return;
     }
        else
        {
            *t = (tnode*)malloc(sizeof(tnode));
            (*t)->data = n;
            (*t)->parent = parent;//可不要
            (*t)->children = (tnode**)malloc(MAX_CHILDREN_NUM*sizeof(tnode*));
            for(n = 0; n children[n], *t);
        }
    }
    void visit(tnode *t)
    {
        printf("%5d", t->data);
    }
    void postorder1(tnode *t)
    {
        int i;
        if(t)
        {
            for(i = 0; i children[i]);
            visit(t);
        }
    }
    void postorder2(tnode *t)
    {// 和前序遍历基本相同,只是把访问语句的执行由
     // 入栈时执行改为出栈时执行
        stack s;
        snode e;
        
        initstack(&s);
        e。
      ptr = t; e。cur = 0; e。visited = false; push(&s, &e); while(s。top) { while(s。elem[s。
      top-1]。ptr) { do { e。ptr = s。elem[s。top-1]。ptr->children[s。elem[s。top-1]。
      cur]; ++s。elem[s。top-1]。cur; }while(!e。ptr && s。elem[s。top-1]。cur  cur = 0; e。visited = false; push(&s, &e); } pop(&s,&e); while(s。top && s。
      elem[s。top-1]。cur == MAX_CHILDREN_NUM) { if(!s。elem[s。top-1]。visited) { visit(s。
      elem[s。top-1]。ptr); s。elem[s。top-1]。
      visited = true; } pop(&s, &e); } } } void main() { tnode *T; create(&T, NULL); printf("\n递归后序遍历:"); postorder1(T); printf("\n非递归后序遍历:"); postorder2(T); }。

    张***

    2018-04-07 04:28:15

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):