sdu_2017_XY 2018-12-09 04:12 采纳率: 0%
浏览 461
已结题

关于树的层次输出问题,请教一下我的代码为什么输出不来结果

rt,个人对于struct的认识还比较浅,会不会是这里出错了呢?烦请大神解答一下。

#include <iostream>
#include <queue>
#include <cmath>
#include <algorithm>
#include "chain.h" 
using namespace std;

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) :
            val(x),left(NULL), right(NULL){
    }
};


struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};
class TreeLevel {
public:
    ListNode* getTreeLevel(TreeNode* root, int dep) {
         if(dep<1||root==NULL)
            return NULL;
        ListNode* list=new ListNode(-1);
        ListNode* listHead=list;
        queue<TreeNode*> qu;//队列辅助进行层次化操作 
        qu.push(root);
        int lines1=1,lines2=0,num=1;
        while(!qu.empty())
        {
            if(num==dep)//判定是否到达dep深度 
            {
                for(int i=0;i<lines1;i++)
                {
                    TreeNode* root1=qu.front();
                    list->next=new ListNode(root1->val);
                    list=list->next;
                    qu.pop();
                }
                return listHead->next;//返回某一层的元素,从左到右排序 
            }
            TreeNode* root1=qu.front();
            //下两个语句说明队列中某行元素的下一层次的元素数 
            if(root1->left)
            {
                qu.push(root1->left);
                lines2++;
            }
            if(root1->right)
            {
                qu.push(root1->right);
                lines2++;
            }
            qu.pop();
            if(--lines1==0)//不满足,则说明队列中还有元素 
            {
                lines1=lines2;//开始进行下一行的操作 
                lines2=0;//初始化欲进行的下一行的元素个数 
                num++;//到达下一行 
            }
        }
        return listHead->next;//这个return语句恒返回空 
    }
};
int main(int argc, char** argv) {
    TreeNode* root=new TreeNode(3);
    TreeNode* left2=new TreeNode(2);
    TreeNode* right2=new TreeNode(1);
    TreeNode* left3=new TreeNode(4);
    TreeNode* left4=new TreeNode(5);
    TreeNode* left5=new TreeNode(6);
    left4->left=left5;
    left3->left=left4;
    left2->left=left3;
    root->left=left2;
    root->right=right2;
    TreeLevel c;
    ListNode* AtDepth;
    AtDepth=c.getTreeLevel(root,2);
    while(!AtDepth){
        cout<<AtDepth->val;
        AtDepth=AtDepth->next;
    }
    return 0;
}
  • 写回答

1条回答 默认 最新

  • devmiao 2018-12-09 13:18
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料