Leetcode-ランタイムエラー:参照は、「構造体VALUE_TYPE」タイプのNULLポインタへの結合

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;
}
};
思想の問題解決:単一のキュー、別のキューに下の左と右のサブツリーと、それぞれを横断。
原因:ベクターを使用して不規則なアレイは、RESは、内側層を使用することができない、外側の層は、ベクターに挿入されていないベクトル<ベクトル<>>タイプ、です。以下を参照してください。
if(){
	while(){
		```
		res[lev].push_back(tmp->val);
		```
	}
	lev++;
}

次のように改正:最初の一時的なベクトル変数に格納された結果を通じて、最後に保存。以下を参照してください。
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