Leetcode-runtime error: reference binding to null pointer of type 'struct value_type'

leetcode-102.二叉树的层次遍历

修改前错误代码

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {
	vector<vector<int>> res;                
	queue<TreeNode*> LL;        
	queue<TreeNode*> RR;
	
	int lev=0;                
	if(root) LL.push(root);
	
	while(!LL.empty()||!RR.empty()){            
        	if(!LL.empty()){
			while(!LL.empty()){                    
			        TreeNode* tmp=LL.front();                    
			        LL.pop();                    
			        res[lev].push_back(tmp->val);                    
			        if(tmp->left)   RR.push(tmp->left);                    
			        if(tmp->right)  RR.push(tmp->right);                
		        }                
		        lev++;            
		}            
	        else if(!RR.empty()){                
		   	while(!RR.empty()){                    
			        TreeNode* tmp=RR.front();                    
			        RR.pop();                    
			        res[lev].push_back(tmp->val);                    
			        if(tmp->left)   LL.push(tmp->left);                    
			        if(tmp->right)  LL.push(tmp->right);                
		        }                
		        lev++;            
		}
	}        
        return res;
}
};
解题思想:每层用一个队列单独遍历,下层的左右子树交给另一个队列。
错误原因:vector数组使用的不规范,res是vector<vector<>>类型,在外层没有插入vector的情况下,内层不能使用。见下:
if(){
	while(){
		```
		res[lev].push_back(tmp->val);
		```
	}
	lev++;
}

修改为:遍历结果先存储在临时的vector变量中,最后保存。见下:
if(){
	vector<int> r;
	while(){
		```
		r.push_back(tmp->val);
		```
	}
	res.push_back(r);
}

修改后AC代码:

/** * Definition for a binary tree node. 
* struct TreeNode { 
* *     int val; 
* *     TreeNode *left; 
* *     TreeNode *right; 
* *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 
* * }; 
* */
class Solution {
public:    vector<vector<int>> levelOrder(TreeNode* root) {
	vector<vector<int>> res;                
	queue<TreeNode*> LL;        
	queue<TreeNode*> RR;                
	if(root) LL.push(root);
	while(!LL.empty()||!RR.empty()){            
        	if(!LL.empty()){                
        		vector<int> r;                
		        while(!LL.empty()){                    
			        TreeNode* tmp=LL.front();                    
			        LL.pop();                    
			        r.push_back(tmp->val);                    
			        if(tmp->left)   RR.push(tmp->left);                    
			        if(tmp->right)  RR.push(tmp->right);                
		        }                
		        res.push_back(r);            
		}            
	        else if(!RR.empty()){                
		        vector<int> r;                
		        while(!RR.empty()){                    
			        TreeNode* tmp=RR.front();                    
			        RR.pop();                    
			        r.push_back(tmp->val);                    
			        if(tmp->left)   LL.push(tmp->left);                    
			        if(tmp->right)  LL.push(tmp->right);                
		        }                
		        res.push_back(r);            
		}
	}        
        return res;
}
};
浏览其他博客,提到比较多的问题(建议检查一下):

1.对于空输入[]不能解决。
2.vector数组初始化出错,代码中越界。

发布了2 篇原创文章 · 获赞 4 · 访问量 96

猜你喜欢

转载自blog.csdn.net/weixin_41923381/article/details/105009246