LeetCode面试题之前序遍历

给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1

2
/
3
输出: [1,2,3]

前序遍历: 根节点 --》左子树 --》右子树
思路:
1
2 3
1 3 5 6
6 7
7 9 0

栈stack:先进后出
堆heap:先进先出

**

stack知识点

**

1、本质:stack是一个容器;实现了栈的先进后出的特点。
2、头文件: #include <stack>
3、定义方式: stack <int> s1;
              stack <string> s2;
4、基本操作: (1)入栈 : s.push(x);2)出栈 : s.pop();3)栈顶 : s.top();4)判空 : s.empty();5)元素个数:s.size();

**

vector知识点

**

1、本质:在C++中;cector标识一个容器。
2、作用:能够像容器一样存放各种类型的对象;简单来说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据
3、注意事项:
      (1)标识的向量长度较长(需要为向量内保存很多数);容易导致内存泄漏,而且效率低
      (2)vector作为函数的参数或者返回值;注意他的写法
           double Distance(vector<int> &a, vector<int> &b)其中&不可以缺少
4、头文件: #include <vector>
5、创建:
6、用法:
      (1)尾部插入 : vec.push_back(a);2)下标访问 : vec[0];vec[0][0]3)
      (4)插入元素 : vec.insert(vec.begin()+i,a);//在第 i+1 个元素之前插入 a5)删除元素 : vec.erase(vec.begin()+2);//删除第三个元素
                       vec.erase(vec.begin()+i,vec.begin()+j);删除区间[i,j-1]6)向量大小 : vec.size();7)清空向量 : vec.clear();
7、vector类型:intdouble、string、struct;注意如果为struct类型;必须定义为全局、否则报错。
思路:res记录 遍历节点的值 ;stk是一个栈;压入、压出
  定义一个节点;先将栈顶压入(res记录数据)--》遍历压入左子树(res记录数据)--》如果左子树为空,stack的top方法,返回栈顶,元素出栈---》遍历压入右子树(res记录数据) ---》结束。
res就是最后的结果
 class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> res;         //定义一个rector容器 int类型
        stack<TreeNode*> stk;    //定义一个stack容器  TreeNode*类型    
        TreeNode* cur = root;    //定义一个 树节点 = 根节点
        while(cur || stk.size()) {  // cur!=null  或者 压入栈个数!=0
            while(cur) {            // cur 为真 
                stk.push(cur);      // 压入栈
                res.push_back(cur->val);  //cur数值存入容器中
                cur = cur->left;    //左子树
            }
            cur = stk.top();        //回到栈顶
            stk.pop();              //出栈
            cur = cur->right;       //右子树
        }
        return res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值