二叉树的顺序遍历和层序遍历

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值