1.トピックの説明
バイナリツリーを指定すると、そのプレオーダートラバーサルを返します。
例:
入力:[1、NULL、2,3]
。1
2
/
3
出力:[1,2,3]
上級:再帰アルゴリズムは非常に単純です。反復アルゴリズムを完了することができますか?
2.私のコード
/ **
-
バイナリツリーノードの定義。
-
構造TreeNode {
-
int val;
-
TreeNode *left;
-
TreeNode *right;
-
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
-
};
/
クラスSolution {
public:
vector preorderTraversal(TreeNode root){
TreeNode * cur_node;
if(root == NULL)
return result_vec;result_vec.push_back(root->val); preorderTraversal(root->left); preorderTraversal(root->right); return result_vec;
}
vector result_vec;
};
スタックを使用する
/ **
-
バイナリツリーノードの定義。
-
構造TreeNode {
-
int val;
-
TreeNode *left;
-
TreeNode *right;
-
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
-
};
/
クラスSolution {
public:
vector preorderTraversal(TreeNode root){
TreeNode * cur_node;
stack <TreeNode *> stack_node;
TreeNode * pre_node;if(root == NULL) return result_vec; cur_node = root; while(cur_node != NULL || !stack_node.empty()){ if(cur_node == NULL){ cur_node = stack_node.top(); stack_node.pop(); } result_vec.push_back(cur_node->val); if(cur_node->right != NULL) stack_node.push(cur_node->right); cur_node = cur_node->left; }; return result_vec;
}
vector result_vec;
};
3.オンラインのより優れたソリューション
Morrisアルゴリズムロジックは明確ではありませんが、ストレージスペースを節約できる可能性があります
4.改善できる場所
a。スタック方式を使用すると、実行効率が高くなく、ロジック設計が間違っています
b。5.
理解できないようにコードを最適化する(効率の低下:63%、メモリの低下:100%)
/ ** -
バイナリツリーノードの定義。
-
構造TreeNode {
-
int val;
-
TreeNode *left;
-
TreeNode *right;
-
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
-
};
/
クラスSolution {
public:
vector preorderTraversal(TreeNode root){
TreeNode * cur_node;
stack <TreeNode *> stack_node;
TreeNode * pre_node;if(root == NULL) return result_vec; cur_node = root; stack_node.push(cur_node); while(!stack_node.empty()){ cur_node = stack_node.top(); stack_node.pop(); result_vec.push_back(cur_node->val); if(cur_node->right != NULL) stack_node.push(cur_node->right); if(cur_node->left != NULL) stack_node.push(cur_node->left); }; return result_vec;
}
vector result_vec;
};
6.得られた思考
トラバーサル順序が異なる場合、スタックに入るロジックは異なります。そうでない場合、ロジックの明確性と実行効率にさえ影響します