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;
}