Leetcode: 二叉树的后序遍历


后遍历的流程:一直往下走,把路口记下来,假如路口有馒头,我们是不吃的,因为要先吃最后的,中间的岔路如果有岔路,就把右边的岔路记下来,但是因为右边没有走过,所以访问的时候也不能吃,但是左边的路因为一直往下走,所以左边没有路了,再次回头左边那些路时,那些馒头就可以吃了。

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

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

Python 实现

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Stack:def __init__(self,x,status):self.node = xself.p = statusclass Solution(object):def postorderTraversal(self, root):""":type root: TreeNode:rtype: List[int]"""result = []stack = []flag = 1while True:while root and flag:stack.append(Stack(root,0))if root.right:stack.append(Stack(root.right,1)) #右边的节点还没完全遍历完,所以不能访问。root = root.leftif len(stack) == 0:return resulttmp = stack.pop()root = tmp.nodeflag = tmp.pif flag == 1: #这个节点不能访问,需要访问完子节点才能访问continueresult.append(root.val)

C语言实现

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
/*** Return an array of size *returnSize.* Note: The returned array must be malloced, assume caller calls free().*/
struct Stack{struct TreeNode *node;int p;
};
int* postorderTraversal(struct TreeNode* root, int* returnSize) {int *result = (int *)malloc(sizeof(int) * 100);int i = 0;struct Stack stack[100]; //模拟栈;int top = -1; //栈顶int flag = 1;while(true){while(flag == 1 && root){stack[++top].node = root;stack[top].p = 0; //这个节点可以直接访问;if(root->right){stack[++top].node = root->right;stack[top].p = 1; // 右节点就不能直接被访问;}root = root->left;}if(top == -1){*returnSize = i;return result;}root = stack[top].node; //访问栈顶元素,flag = stack[top--].p;if(flag == 1)continue; // 这时候还不能被访问的,result[i++] = root->val;     }}

转载于:https://www.cnblogs.com/xmxj0707/p/9671003.html

Leetcode: 二叉树的后序遍历相关推荐

  1. 刻意练习:LeetCode实战 -- 二叉树的后序遍历

    背景 今天,第二期基础算法(Leetcode)刻意练习训练营 的打卡任务是二叉树的中序遍历,由于二叉树的遍历方式通常来说有四种:前序遍历.中序遍历.后序遍历以及层次遍历,而LeetCode也有二叉树的 ...

  2. [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历

    Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...

  3. LeetCode 145:二叉树的后序遍历

    二叉树的后序遍历 题目描述: 给定一个二叉树的根节点 root ,返回它的 后序 遍历. 示例1: 输入: [1,null,2,3] 1\2/3 输出: [3,2,1] 链接: 145. 二叉树的后序 ...

  4. 二叉树后序遍历_LeetCode算法145. 二叉树的后序遍历

    leetcode LeetCode算法-145. 二叉树的后序遍历 145. 二叉树的后序遍历 题目 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / ...

  5. 二叉树的后序遍历-python

    leetCode第145题 二叉树的后序遍历 链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal 给你一棵二叉树的根 ...

  6. 二叉树的前序遍历,二叉树的中序遍历,二叉树的后序遍历,二叉树的层序遍历

    二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 1: 输入:root ...

  7. 【7-10 PAT】树的遍历(给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。)

    题干: 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 解题报告: dfs求出这棵树来,然后bfs求层序遍历就行了. AC代码: #include&l ...

  8. LeetCode-145:二叉树的后序遍历

    题目描述: 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3]      1     \      2     /    3 输出: [3,2,1] 思路分析: 递归法: ...

  9. PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集...

    L2-006 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤),是二叉树中结点的个 ...

最新文章

  1. [HDOJ2845]Beans(dp)
  2. input 单选框ajax提交,input radio单选框绑定change事件
  3. spingmvc的一些简单理解和记录
  4. 离散点自动生成等高线_有限自动机| 离散数学
  5. QString 字符编码
  6. Spring Boot拦截器(WebMvcConfigurerAdapter)
  7. 惠普HP LaserJet Pro MFP M126nw 打印机驱动
  8. 一场视频号裂变活动获客3W+,头部品牌裂变案例拆解
  9. 自定义桌面launcher-android
  10. Alibaba微服务组件Sentinel
  11. Xss小游戏通关攻略带解释
  12. 淘口令卡首屏直通车卡首屏关键词刷单技术分享
  13. 张大眼睛,看到了什么?
  14. Black Arch虚拟机安装及配置
  15. 基于高通X55平台的5G模组iperf灌包参数配置
  16. 用js javascript 创建网页快捷方式
  17. Linux(常用)命令篇
  18. 静态HTML网页设计作品—绿色古典旅游景区(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品
  19. 松下PLC控制松下伺服电机(上位机发送控制命令)
  20. 知识管理中如何保证数据安全,权限控制很重要

热门文章

  1. [Android]Log打印
  2. 浅谈SQL Server identity列的操作方法
  3. 分享基于silverlight的一个大文件上传控件
  4. 跟我一起学jQuery——第二集(未完待续..)
  5. 各种机器学习的应用场景分别是什么
  6. c 语言从文件中读取字符串数组,C从文本文件读取到数组/字符串
  7. IT程序员必知!TCP/IP为什么会有这么多的致命漏洞?
  8. s:TextInput优化
  9. 高德地图获取坐标距离_【转】根据高德地图得出的坐标算出两点之间的距离
  10. python列表数据类型(一分钟读懂)