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

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个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

1
请教大神看下这种层次的家谱输出,如何使用线索树实现呢?C语言的问题
0
构造层次树网络的编程的任务完成检索,怎么利用C语言的程序的编写的代码过程的方式实现
2
请教一下,vs2017 为什么我的c++代码定义的没有问题,也没有错误提示,但是一编译就爆出很奇怪的错误
2
想请教一下全局变量在递归中是怎么样的
1
学生党在线求一个决策树算法的应用,谢谢各位大佬
1
数据结构问题:一棵普通的树转化成二叉树,为什么输出的时候无法输出呢(是我转化没有成功吗)?
2
关于红黑树数据结构的一个基础问题
2
请大佬帮忙看看两道vjudge上的题,代码在ide上能按照题目的用例正确输出,但提交就是wrong answer?
0
输入字符串构建两个二叉搜索树
1
关于C++二叉树遍历的问题
1
数据结构------树 能不能帮忙解答下
1
数据以树形格式关联 N级树的读取权限问题
0
树莓派4上使用ffmpeg实现的网络摄像头,当出现动态画面时候很不清晰,请问该怎么解决?
0
动态故障树中的冷备件门与顺序相关门区别是啥?
1
一个二叉排序树输出的问题
1
树莓派的WiringPi库找不到
1
求教大佬们,这个“读取位置 0xCCCCCCCC 时发生访问冲突。”的异常该如何解决?
0
在TODO: Add the code here处添加一怎样的段代码,使其变成一个完整的生成哈夫曼树的代码
1
c语言中的先序插入二叉树怎么写?