摘要: 层序遍历,使用队列将每层压入,定义两个队列来区分不同的层。 vector<vector<int>> levelorderTraversal(TreeNode *root) { vector<vector<int>> result; vector<int>tmp; //通过两个queue来区分不同的层 阅读全文
posted @ 2016-05-28 16:27 牧马人夏峥 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 后序遍历,比先序和中序都要复杂。访问一个结点前,需要先判断其右孩子是否被访问过。如果是,则可以访问该结点;否则,需要先处理右子树。 vector<int> postorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode 阅读全文
posted @ 2016-05-28 16:10 牧马人夏峥 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 树的中序遍历。先不断压入左结点至末尾,再访问,再压入右结点。注意和先序遍历的比较 vector<int> inorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode *>s; TreeNode *p = root; wh 阅读全文
posted @ 2016-05-28 15:29 牧马人夏峥 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 树的先序遍历。定义一个栈,先压入中间结点并访问,然后依次压入右、左结点并访问。 vector<int> preorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode *>s; TreeNode *p; p = root; 阅读全文
posted @ 2016-05-28 15:05 牧马人夏峥 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 很简单的一道题,定义一个栈保留操作数,遇操作符则弹出运算即可。 bool isOperator(string &op) { //注意用法 return op.size() == 1 && string("+-*/").find(op) != string::npos; } int evalRPN(v 阅读全文
posted @ 2016-05-28 14:44 牧马人夏峥 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 又是一道构思巧妙的题,暴力求解复杂度太高,通过构造一个递增栈来解决:如果当前元素小于栈顶元素,则说明栈内已经构成一个 递增栈,则分别计算以每个元素为最低值的面积;反之,则入栈。 int largestRect(vector<int> &height) { stack<int> s;//定义一个单调递 阅读全文
posted @ 2016-05-28 14:22 牧马人夏峥 阅读(175) 评论(0) 推荐(0) 编辑