145. 二叉树的后序遍历 Difficulty: 中等 给定一个二叉树,返回它的 _后序 _遍历。 示例: 输入: [1,null,2,3] 12/3 输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗? Solution 迭代 # Definition for a binary tree node. # class TreeNode: # ? ? def __init__(self, val=0, left=None, right=None): # ? ? ? ? self.val = val # ? ? ? ? self.left = left # ? ? ? ? self.right = right class Solution:? ?def p...
思路: 1.如果链表为空,则返回其本身; 2.如果链表不为空,初始化排序表最后指针lastsorted为head,当前需排序的指针curr为head->next; 3.为了方便将元素插入到head之前,设立Head_front指针,值设为0,指向head; 4.初始化完成后,对排好序的表利用指针prev进行遍历查找,找到适合插入的位置;ListNode *prev = Head_front;while (prev->next->val <= curr->val)prev = prev->next;5.将需排序元素curr原地删除,插入新的位置中;...
题目思路 这道题的解题思路主要为贪心,其思想和田忌赛马类似。题目要求对于同一个索引位置,A[i]>B[i]的索引数目。为了让“资源”利用率最大化,对于B位置某个索引处的元素,对应调出的A数组中的元素应该是刚刚好大于它,也就是A数组中大于该元素的第一个数。如果不存在这样的数(或者有合适的数但之前已被占用)则将当前A数组中可用的最小值分给它,减少资源的损失。为了更快查找到该元素,需要先对A数组进行排序。之后遍历B数...
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Codec:def serialize(self, root):"""Encodes a tree to a single string.:type root: TreeNode:rtype: str"""# 序列化后的形式:[1,2,3,null,null,4,5]# 使用层次遍历if not root: # 如果树为空,序列化为空列表return "[]"queue = collectio...
题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 平衡二叉树 解题思路 首先我们从根节点出发,要是它的左子树的高度和右子树的高度差距大于1,那么就返回false,不是的话就依次往下遍历,比如,遍历树的左子树,递归的方式,将整个树遍历完成。这里还需要写一个求树高度的方法,方便调用。 代码展示 class Solution {...
题目描述 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3/ 9 20/ 15 7返回它的最大深度 3 。 题解 方法1:层序遍历 有几层深度就是多少,做过层序遍历的都懂public int maxDepth(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();int maxDept=0;if (root==null){return m...
根据一棵树的前序遍历与中序遍历构造二叉树。 思路: 1.根据前序数组,找到根节点 2.根据中序数组中的根节点,找到左子树的长度 3.根据左子树的长度,找到左右子树的前序数组和中序数组 4.递归调用,直到前序数组为null function TreeNode(val, left, right) {this.val = (val===undefined ? 0 : val)this.left = (left===undefined ? null : left)this.right = (right===undefined ? null : right) } var buildTree = function(pr...
若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。) 示例 1: 输入:[1,2,3,4,5,6]输出:true解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的所有结点({4,5,6})都尽可能地向左。示例 2:输入:[1,2,3,4,5,null,7]输出:false解释:值为 7 的结点没有尽...
1 // 主函数2 Node connect(Node root) {3 //--主函数可以解决:4 //--用递归函数遍历左右节点时,5 //--root节点必定是完全没有兄弟节点的特殊情况,6 //--将root节点独立处理7 if (root == null) return null;8 connectTwoNode(root.left, root.right);9 return root; 10 } 11 12 // 辅助函数 13 //--辅助函数即递归函数的主体 14 void connectTwoNode(Node node1, Node node2) { 15 //--二叉树...
给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1: 输入:root = [1,2,5,3,4,null,6] 输出:[1,null,2,null,3,null,4,null,5,null,6] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [0] 输出:[0] 提示: 树中结点数在范围 [0, 2000] 内 -100...
根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树:思路:这道题用递归来解决。 首先我们能从一个树的前序遍历序列得知该树的根节点的值。然后我们去中序遍历序列里面找根节点所在位置,那么根节点左右两侧的子序列就是左子树和右子树的中序序列。然后我们再去前序序列里面找,根节点之后紧跟的...
二叉树的层序遍历II 题目描述: 给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 题目链接 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.v...
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def isSymmetric(self, root: TreeNode) -> bool:def recur(L,R):# 如果左右树都为空,则为遍历完的情况,返回Trueif not L and not R:return True# 一个为空一个不为空或者当前的值不同,返回Falseif not L or not R or L.val!=R.val:return...
331. 验证二叉树的前序序列化 题目地址 描述序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。例如,上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表一个空节点。 给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。 每个以逗号分隔的...
Leetcode 102. 二叉树的层序遍历 题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 一道非常标准的宽度优先搜索题目,直接套算法模板就成。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(null...