关于树的层次输出问题,请教一下我的代码为什么输出不来结果 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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问