leetcode 145 --- 二叉树后序遍历

1 题目

用递归的方法对给定的二叉树进行后序遍历。

例如:

给定的二叉树为{1,#,2,3},

返回[3,2,1].

示例1

输入

{1,#,2,3}

输出

[3,2,1]

2 解法

2.1 递归解法

/*** struct TreeNode {*	int val;*	struct TreeNode *left;*	struct TreeNode *right;* };*/class Solution {
public:/*** * @param root TreeNode类 * @return int整型vector*/vector<int> postorderTraversal(TreeNode* root) {// write code herevector<int> res;if (root == nullptr)return res;if (root->left != nullptr) {vector<int> left_res = postorderTraversal(root->left);for (int i = 0; i < left_res.size(); i++) {res.push_back(left_res[i]);}}if (root->right != nullptr) {vector<int> right_res = postorderTraversal(root->right);for (int i = 0; i < right_res.size(); i++) {res.push_back(right_res[i]);}}res.push_back(root->val);return res;}
};

性能还可以:

2.2 非递归解法

后续遍历,首先是遍历左节点,然后是右节点,最后是自身,所以可以通过栈的方式,放入自身,然后放右节点,最后是左节点,然后检查栈顶,如果是叶子节点,那么遍历,出栈.如果发现其有左/右子节点,不可以直接把左/右子节点入栈(因为左右子节点遍历过了之后继续入栈会陷入死循环), 要先检查一下,设置一个标记前一个出栈节点的标记指针,如果这个前一个出栈节点不是自己的左右子节点(且不能为空),那么说明他的左右子节点还没有遍历过,那么左右子节点入栈,否则遍历自身且出栈:

/*** struct TreeNode {*	int val;*	struct TreeNode *left;*	struct TreeNode *right;* };*/class Solution {
public:/*** * @param root TreeNode类 * @return int整型vector*/vector<int> postorderTraversal(TreeNode* root) {// write code herevector<int> res;if (root != nullptr) {stack<TreeNode*> tS;tS.push(root);TreeNode* pre = nullptr;while(!tS.empty()) {TreeNode* tN = tS.top();if ((tN->left == nullptr && tN->right == nullptr) ||(pre != nullptr && (pre == tN->left || pre == tN->right))) {res.push_back(tN->val);tS.pop();pre = tN;} else {if (tN->right != nullptr)tS.push(tN->right);if (tN->left != nullptr)tS.push(tN->left);}}}return res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 144 --- 二叉树前序遍历

1 题目 求给定的二叉树的前序遍历。 2 解法 2.1 递归解法 2.2 非递归解法 前序遍历,先遍历根节点,然后遍历左节点,最后是右节点,所以用栈的方式,先是根节点入栈,然后出栈遍历,如果该节点有左右节点,那么左右节点入栈(应为右节点先入栈,然后是左节点,因为左节点先遍历,所以…

leetcode 116 --- 填充每个节点指向最右节点的next指针

1 题目 填充每个节点指向最右节点的next指针, 填充所有节点的next指针&#xff0c;指向最接近它的同一层右边节点。如果没有同一层没有右边的节点&#xff0c;则应该将next指针设置为NULL。 初始时&#xff0c;所有的next指针都为NULL 注意&#xff1a; 你只能使用常量级…

leetcode 110 --- 判断给定的二叉树是否是平衡二叉树

1 题目 判断给定的二叉树是否是平衡二叉树 平衡二叉树的性质为: 要么是一棵空树&#xff0c;要么任何一个节点的左右子树高度差的绝对值不超过 1。 一颗树的高度指的是树的根节点到所有节点的距离中的最大值。 2 解法 2.1 多次递归 最初的想法肯定是先求出每个节点的左右…

leetcode 107 --- 二叉树程序遍历 ii

1 题目 给定一个二叉树&#xff0c;返回该二叉树由底层到顶层的层序遍历&#xff0c;&#xff08;从左向右&#xff0c;从叶子节点到根节点&#xff0c;一层一层的遍历&#xff09; 2 解法 2.1 我的最初解法 按照正常的层序遍历应该是从上到下的,只要用一个栈先临时存一下每…

leetcode 148 --- 链表排序

1 题目 链表排序 2 解法 2.1 冒泡排序 /*** struct ListNode {* int val;* struct ListNode *next;* };*/class Solution { public:/*** * param head ListNode类 * return ListNode类*/ListNode* sortList(ListNode* head) {// write code hereif (head) {ListNode* endNo…

leetcode 1 --- 两数之和

1 题目 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素不能使用两遍。 2 解法 struct haveOrigionIndexNu…

leetcode 2 --- 两数相加

1 题目 给出两个 非空 的链表用来表示两个非负的整数。其中&#xff0c;它们各自的位数是按照 逆序 的方式存储的&#xff0c;并且它们的每个节点只能存储 一位 数字。 如果&#xff0c;我们将这两个数相加起来&#xff0c;则会返回一个新的链表来表示它们的和。 您可以假设…

leetcode 9 --- 回文数

1 题目 判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 2 解法 2.1 初版 2.1.1 思路 由于题目不允许把数直接转化为字符串, 所以想到了把数的每一位转换为双向数组, 然后对头尾一点…

C++中类和对象的一些注意事项 ---继承

1 继承中的访问权限问题 所有继承方式, 子类都无法访问父类的private成员. 那么用如下测试代码尝试一下: #include <iostream> using namespace std;class father { public:int m_father_public_value; protected:int m_father_protected_value; private:int m_father_…

C++中类和对象的一些注意事项 --- 多态

1. 一些继承中的问题 1.1 多继承中父类含有重名成员问题 如下: #include <iostream> #include <string> using namespace std;class father1 { public:father1() {class_name "father1";}string class_name; };class father2 { public:father2() {cl…

电脑按f8无法进入安全模式_自已有电脑的人,都会遇到系统死机问题,教大家实用一招自已解决...

其实我们电脑死机蓝屏重启并不可怕&#xff0c;如果只要懂得最基本的一些查找方法就可以解决这些问题&#xff0c;因为电脑是一个完整的系统&#xff0c;既然是系统工程必须由硬件与软件共同合作才能完成出色的任务&#xff0c;如果电脑出现死机蓝屏等问题可以参考以下方式进行…

台式电脑键盘字母乱了_键盘侠的育儿经利用键盘引导学龄前儿童正确使用电脑、学习英文字母和拼音...

点击上方“总想做自己”关注我可以订阅哦一点资讯邀约作者&#xff1a;方游专注探讨个人成长与正向激励的话题&#xff0c;有干货&#xff0c;不再错过&#xff0c;快来点击关注吧&#xff01;微信公众号&#xff1a;apple_seeworld难得机会与孩子在家里有长达半月的相处&#…

C++模板的注意事项

函数模板 template <typename T> //把typename换成class也可以 函数模板调用方法 使用过程中, 有两种方法调用, 如下: 自动类型推导:#include <iostream>template <class T> void swap(T &first, T &second) {T temp;temp first;first se…

excel教程自学网_Excel自学教程:万能查找函数Lookup的神应用和技巧

提起查找函数&#xff0c;大家第一时间想到的肯定是Vlookup&#xff0c;其实大多数人不知道&#xff0c;Lookup才是查找函数之王&#xff0c;它几乎能高效地实现Vlookup函数的所有功能&#xff0c;部分功能是Vlookup函数无法比拟的。一、语法结构和基本使用方法。应用场景&…

C++ STL 容器的一些总结

1 C STL类型及实现原理 1.1 顺序容器 容器中的元素为有序排列,可以指定元素插入位置. 1.1.1 vector 顺序存储, 初始化过程会分配一定量空间, 在尾部插入会很快, 但是在中间插入元素, 会把之后所有元素向后平移, 所以较慢(中间删除元素同理). 如果元素个数超过当前限制, 会重…

java电商项目简历_一文解析从写简历,到面试、谈薪酬技巧和防坑指南

点击上方“码农沉思录”&#xff0c;选择“设为星标”优质文章&#xff0c;及时送达读者大大们好&#xff0c;好几天没更新了。一方面因为这几天工作忙&#xff0c;占了写作的时间。另一方面是在准备这篇文章各种素材&#xff0c;今年是最难求职年&#xff0c;我希望通过这篇文…

qq浏览器极速版_安卓手机QQ轻聊版大升级,极速版正式上线:无广告/省内存

8月28日&#xff0c;安卓手机QQ极速版推出了4.0正式版&#xff0c;采用了全新的界面设计&#xff0c;仅保留了基本聊天功能和QQ空间、小程序、钱包、文件等少量QQ主推功能&#xff0c;现已开放下载&#xff0c;QQ极速版安装之后会覆盖QQ轻聊版。QQ极速版4.0界面焕新升级&#x…

C++ STL 容器 vector

1 vector简介 顺序存储, 初始化过程会分配一定量空间, 在尾部插入会很快, 但是在中间插入元素, 会把之后所有元素向后平移, 所以较慢(中间删除元素同理). 如果元素个数超过当前限制, 会重新分配更大空间, 再把原容器中所有元素都拷贝到新的容器中. 优点: 支持随机访问(用下标…

3dmax卸载工具_3dmax软件如何彻底卸载?

近期有很多学员遇到关于3dmax软件卸载的问题&#xff0c;有的是想安装更高版本但不知道如何卸载更安全&#xff0c;有的是自己卸载了之后再安装其他版本却总是无法成功&#xff0c;这对此类问题&#xff0c;今天我做一个详细讲解&#xff1b;根据自己所遇问题&#xff0c;找到最…

华为app安装失败与已安装签名_手机APP为什么总是安装失败

整天“机不离手”的我们每个人手机里都装有好几十个APP但安装的时候总会出现跳出手机APP无法安装或安装失败的页面这究竟是怎么回事呢&#xff1f;小翼带你瞅瞅一、手机安全认证在安装或下载应用程序时&#xff0c;如果提示失败可能是因为系统“未知来源”没有开启。可以通过打…