LeetCode 145. 二叉树的后序遍历(后序遍历总结)

文章目录

    • 1. 题目信息
    • 2. 解法
      • 2.1 递归
      • 2.2 循环,必须掌握
        • a. 单栈
        • b. 双栈解法
    • 3. 前中后序总结

1. 题目信息

给定一个二叉树,返回它的 后序 遍历。

示例:输入: [1,null,2,3]  1\2/3 输出: [3,2,1]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解法

2.1 递归

在这里插入图片描述

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {vector<int> ans;preorder(root, ans);return ans;}void preorder(TreeNode* root, vector<int> &ans){if(root == NULL)return;preorder(root->left, ans);preorder(root->right, ans);ans.push_back(root->val);}
};

2.2 循环,必须掌握

左右根

a. 单栈

  • 先按照"根-右-左"的顺序遍历二叉树(和先序遍历有些像),
  • 然后将遍历的结果反转过来就是“左-右-根”,也就是后序遍历了
class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {vector<int> ans;stack<TreeNode*> stk;while(root || !stk.empty()){while(root){stk.push(root);ans.push_back(root->val);root = root->right;}root = stk.top()->left;stk.pop();}//反转遍历结果reverse(ans.begin(),ans.end());return ans;}
};

以下解法会破坏二叉树

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {vector<int> ans;if(root==NULL)return ans;TreeNode *cur;stack<TreeNode*> stk;stk.push(root);while(!stk.empty()){cur = stk.top();if(cur->left){stk.push(cur->left);cur->left = NULL;}else if(cur->right){stk.push(cur->right);cur->right = NULL;}else{ans.push_back(cur->val);stk.pop();}}return ans;}
};

b. 双栈解法

在这里插入图片描述

  • stk1,模仿前序遍历的实现“反后序遍历”
  • stk2,保存stk1的pop元素
class Solution {
public:vector<int> postorderTraversal(TreeNode *root) {vector<int> ans;if(root == NULL) return ans;stack<TreeNode*> stk1;stack<TreeNode*> stk2;stk1.push(root);TreeNode *cur;while(!stk1.empty()){cur = stk1.top();stk1.pop();stk2.push(cur);if(cur->left)stk1.push(cur->left);if(cur->right)stk1.push(cur->right);}while(!stk2.empty()){cur = stk2.top();stk2.pop();ans.push_back(cur->val);}return ans;}
};

3. 前中后序总结

在这里插入图片描述

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

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

相关文章

云原生之容器安全实践

概述 云原生&#xff08;Cloud Native&#xff09;是一套技术体系和方法论&#xff0c;它由2个词组成&#xff0c;云&#xff08;Cloud&#xff09;和原生&#xff08;Native&#xff09;。云&#xff08;Cloud&#xff09;表示应用程序位于云中&#xff0c;而不是传统的数据中…

领域应用 | HiTA知识图谱 “药品-适应证”图谱数据发布!

本文转载自公众号&#xff1a;OMAHA联盟。2019年8月&#xff0c;OMAHA对HiTA知识图谱服务平台&#xff08;kg.omaha.org.cn&#xff09;进行了更新&#xff0c;同步发布了医学知识图谱表达模型&#xff08;schema&#xff09;。2019年9月17日&#xff0c;首次发布了由OMAHA研发…

主题模型综述:短文本、细粒度、加入先验知识、作者写作偏好、主题内涵随时间的变迁、融入词嵌入特性、语言模型加持

原文链接&#xff1a;https://www.zhihu.com/question/34801598/answer/765580727 主题模型当然有用咯&#xff0c;谁用谁知道&#xff01;这次我来展示下它的7个“变种”(短文本、细粒度、加入先验知识、作者写作偏好、主题内涵随时间的变迁、融入词嵌入特性、语言模型加持)&a…

完全解析:使用Faiss进行海量特征的相似度匹配

文 | Gemfield源 | 知乎Faiss为稠密向量提供高效相似度搜索和聚类&#xff0c;支持十亿级别向量的搜索&#xff0c;是目前最为成熟的近似近邻搜索库。本文从最基本的特征比对开始讲解&#xff0c;中间详细讲解Faiss的环境配置以及使用步骤&#xff0c;最后落脚到为什么我们需要…

LeetCode 173. 二叉搜索树迭代器(中序遍历)

文章目录1. 题目信息2. 二叉树中序遍历1. 题目信息 实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。 调用 next() 将返回二叉搜索树中的下一个最小的数。 示例&#xff1a; BSTIterator iterator new BSTIterator(root); iterator.next(); // 返…

论文浅尝 | 面向时序知识图谱推理的循环事件网络

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为知识库问答。来源&#xff1a;arXiv (short version accepted at ICLR 2019Workshop on Representation Learning on Graphs and Manifolds)链接&#xff1a;https://arxiv.org/abs/1904.05530…

Android实现炫酷的星空变幻效果

二话不说&#xff0c;先上效果图&#xff1a; 这个图是什么意思呢&#xff0c;有没有看到一直在变颜色啊&#xff0c;有没有很像星云变幻呢&#xff0c;有没有很炫&#xff0c;快来看看怎么实现的吧&#xff01; 这是我们要被处理的原图&#xff0c;实现方式就是通过不断的改变…

美团配送数据治理实践

大数据时代的到来&#xff0c;让越来越多的企业看到了数据资产的价值。将数据视为企业的重要资产&#xff0c;已经成为业界的一种共识&#xff0c;企业也在快速探索应用场景和商业模式&#xff0c;并开始建设技术平台。 但这里要特别强调一下&#xff0c;如果在大数据“拼图”中…

这可能是你近 2 年发论文最好机会!

几年前如果熟练使用TensorFlow&#xff0c;同时掌握基本的AI算法就可以很容易找到一份高薪的工作&#xff0c;但现在不一样了&#xff0c;AI岗位的要求越来越高&#xff0c;对知识的深度也提出了更高的要求。如果现在一个面试官让你从零推导SVM的Dual、从零实现CRF、推导LDA、设…

LeetCode 671. 二叉树中第二小的节点

文章目录1. 题目信息2. 解题2.1 递归查找2.2 改循环1. 题目信息 给定一个非空特殊的二叉树&#xff0c;每个节点都是正数&#xff0c;并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话&#xff0c;那么这个节点的值不大于它的子节点的值。 给出这样的一…

论文浅尝 | 多标签分类中的元学习

论文笔记整理&#xff1a;叶群&#xff0c;浙江大学计算机学院&#xff0c;知识图谱、NLP方向。会议&#xff1a;EMNLP 2019链接&#xff1a;https://arxiv.org/abs/1909.04176Abstract这篇论文首次在多标签分类问题中提出了 meta-learning 的方法&#xff0c;学习weight polic…

从源码角度分析Android系统的异常捕获机制是如何运行的

我们在开发的时候经常会遇到各种异常&#xff0c;当程序遇到异常&#xff0c;便会将异常信息抛到LogCat中&#xff0c;那这个过程是怎么实现的呢&#xff1f; 我们以一个例子开始&#xff1a; import android.app.Activity; import android.os.Bundle;public class MainActivit…

法律规则鬼畜图解||全面易懂的旅游投诉赔偿标准

法律规则鬼畜图解||全面易懂的旅游投诉赔偿标准https://zhuanlan.zhihu.com/p/82878902 执笔人&#xff1a;张宗保律师&#xff08;联系方式&#xff1a;知乎私信&#xff09;执业地域&#xff1a;深圳市执业方向&#xff1a;民商事诉讼一、赔偿标准的适用前提只有在旅游者和旅…

美团技术十年:让我们感动的那些人那些事

时光荏苒&#xff0c;美团十岁了&#xff0c;美团技术团队也走过了十个春秋。 2010年3月4日美团网上线的时候&#xff0c;整个公司总共十来人&#xff0c;在一套三居室的民房里起步。其中技术团队只有5个人&#xff0c;现在有4位还在美团。 今天&#xff0c;美团是中国市值第三…

LeetCode 113. 路径总和 II(回溯)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个二叉树和一个目标和&#xff0c;找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树&#xff0c;以及目标和 sum 22&#xff0c;5/ \4 8/ / \11 1…

开放开源 | DeepKE:基于深度学习的开源中文关系抽取工具

本文转载自公众号&#xff1a;浙大 KG。作者&#xff1a;余海阳机构&#xff1a;浙江大学代码地址: https://github.com/zjunlp/deepkeOpenKG 发布地址: http://openkg.cn/tool/deepke一、系统简介关系抽取是知识图谱构建的基本子任务之一&#xff0c;它主要面向非结构化的文本…

微前端在美团外卖的实践

背景 微前端是一种利用微件拆分来达到工程拆分治理的方案&#xff0c;可以解决工程膨胀、开发维护困难等问题。随着前端业务场景越来越复杂&#xff0c;微前端这个概念最近被提起得越来越多&#xff0c;业界也有很多团队开始探索实践并在业务中进行了落地。可以看到&#xff0c…

论文浅尝 | Meta Relational Learning: 基于元关系学习的少样本知识图谱推理

本文转载自公众号&#xff1a;浙大KG。 笔记整理&#xff1a;陈名杨&#xff0c;浙江大学在读博士发表会议&#xff1a;EMNLP-2019论文链接&#xff1a;https://arxiv.org/abs/1909.01515开源代码&…

测试集没标签,可以拿来测模型吗?

文&#xff1a;维建编&#xff1a;白鹡鸰背景正常情况下&#xff0c;我们可以用一个带标签的数据集来测试分类器的表现&#xff08;称之为测试集&#xff09;。然而&#xff0c;现实中&#xff0c;因为种种因素的制约&#xff08;标注成本高、标注难度大等 Google&#xff1a;穷…

从0到1 | 手把手教你如何使用哈工大NLP工具——PyLTP!

原文链接&#xff1a;https://flashgene.com/archives/46041.html 本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢. 作者 | 杨秀璋 来源 | CSDN 博客&#xff08;CSDN id&#xff1a;Eastmount&#xff09; 【导语】此文是作者基于 Python 构…