提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
今天是跟着代码随想录刷题的第十四天,今天主要学习了二叉树的理论知识、递归遍历、迭代遍历。
一、前序遍历二叉树
思路:实际上就是先把自己这个节点加进去,然后再调用自己,把自己的左右节点加进去,以此类推,把自己左节点的左节点也加进去,然后加右节点。
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> result;
traversal(root,result);
return result;
}
};
二、迭代法
思路:主要是利用栈来做一个迭代的遍历,注意点就是先放右节点再放左节点,这样才能先出左节点再出右节点
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
stack<TreeNode*> st;
vector<int> result;
TreeNode* a;
st.push(root);
while(!st.empty())
{
a=st.top();
st.pop();
if(a!=NULL) result.push_back(a->val);
else continue;
st.push(a->right);
st.push(a->left);
}
return result;
}
};