二叉树的前序遍历(递归)
递归究竟如何理解?先理解不了没关系,记住三要素先
- 传入参数以及返回类型。
- 终止条件。
- 单层处理逻辑。
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& vec){
if(cur==NULL){
return;
}
vec.push_back(cur->val);
traversal(cur->left, vec);
traversal(cur->right,vec);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ans;
traversal(root,ans);
return ans;
}
};
中序后序遍历用递归法写出来的代码调整顺序就行,不继续放代码了。
二叉树的中序遍历(迭代)
这是非统一版本的
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
stack<TreeNode*> st;
TreeNode* cur =root;
while(cur!=NULL || !st.empty()){
if(cur!=NULL){
st.push(cur);
cur = cur->left;
}else{
cur = st.top();
ans.push_back(st.top()->val);
st.pop();
cur = cur->right;
}
}
return ans;
}
};