1、二叉树的顺序遍历可以使用递归和迭代的方法,本质都是使用栈数据结构,区别有递归的时候按照题中的要求顺序写,比如此处力扣94二叉树的中序遍历(顺序为左中右)代码如下:
void traversal(TreeNode* cur,vector& vec){
if (cur==NULL) return;
traversal(cur->left,vec);//左
vec.push_back(cur->val);//中
traversal(cur->right,vec);//右
}
主:
vector result;
traversal(root,result);
return result;
而迭代时要将顺序反过来,因为是栈结构,进去时为右中左,出来时就是题中要求的左中右了,代码如下:
vector result;
stack<TreeNode*> st;
if(root !=NULL) st.push(root);
while(!st.empty()){
TreeNode* node = st.top();
if(node != NULL){
st.pop();
if(node->right) st.push(node->right);//右
st.push(node);
st.push(NULL);//中
if(node->left) st.push(node->left);//左
}else{
st.pop();
node = st.top();
st.pop();
result.push_back(node->val);
}
}
return result;
2、层序遍历(力扣102)是要考虑一边进一边出所以要用到队列这种数据结构,代码如下:
queue<TreeNode*> que;
if(root !=NULL) que.push(root);
vector<vector > result;
while(!que.empty()){
int size = que.size();
vector vec;
for(int i = 0; i < size;i++){
TreeNode* node = que.top();
que.pop();
vec.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
result.push_back(vec);
}
return result;