Leetcode: 二叉树的后序遍历
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: 二叉树的后序遍历相关推荐
- 刻意练习:LeetCode实战 -- 二叉树的后序遍历
背景 今天,第二期基础算法(Leetcode)刻意练习训练营 的打卡任务是二叉树的中序遍历,由于二叉树的遍历方式通常来说有四种:前序遍历.中序遍历.后序遍历以及层次遍历,而LeetCode也有二叉树的 ...
- [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历
Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...
- LeetCode 145:二叉树的后序遍历
二叉树的后序遍历 题目描述: 给定一个二叉树的根节点 root ,返回它的 后序 遍历. 示例1: 输入: [1,null,2,3] 1\2/3 输出: [3,2,1] 链接: 145. 二叉树的后序 ...
- 二叉树后序遍历_LeetCode算法145. 二叉树的后序遍历
leetcode LeetCode算法-145. 二叉树的后序遍历 145. 二叉树的后序遍历 题目 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / ...
- 二叉树的后序遍历-python
leetCode第145题 二叉树的后序遍历 链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal 给你一棵二叉树的根 ...
- 二叉树的前序遍历,二叉树的中序遍历,二叉树的后序遍历,二叉树的层序遍历
二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 1: 输入:root ...
- 【7-10 PAT】树的遍历(给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。)
题干: 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 解题报告: dfs求出这棵树来,然后bfs求层序遍历就行了. AC代码: #include&l ...
- LeetCode-145:二叉树的后序遍历
题目描述: 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 思路分析: 递归法: ...
- PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集...
L2-006 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤),是二叉树中结点的个 ...
最新文章
- [HDOJ2845]Beans(dp)
- input 单选框ajax提交,input radio单选框绑定change事件
- spingmvc的一些简单理解和记录
- 离散点自动生成等高线_有限自动机| 离散数学
- QString 字符编码
- Spring Boot拦截器(WebMvcConfigurerAdapter)
- 惠普HP LaserJet Pro MFP M126nw 打印机驱动
- 一场视频号裂变活动获客3W+,头部品牌裂变案例拆解
- 自定义桌面launcher-android
- Alibaba微服务组件Sentinel
- Xss小游戏通关攻略带解释
- 淘口令卡首屏直通车卡首屏关键词刷单技术分享
- 张大眼睛,看到了什么?
- Black Arch虚拟机安装及配置
- 基于高通X55平台的5G模组iperf灌包参数配置
- 用js javascript 创建网页快捷方式
- Linux(常用)命令篇
- 静态HTML网页设计作品—绿色古典旅游景区(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品
- 松下PLC控制松下伺服电机(上位机发送控制命令)
- 知识管理中如何保证数据安全,权限控制很重要