二叉树
逝水一战
重剑无锋,大巧不工
展开
-
二叉树路径和问题
问题一:二叉树中最大路径和(leetcode124) 问题描述: 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 大体思路: 其最大路径和有以下四种可能: 1) 由当前结点的左子树结点到右子树结点 2) 由当前结点到其左子树某一节点 3) 由当前结点到其右子树某一节点 4) 由当前结点本身 分析完可能性发现不能简单的返回当前结点的最大路径和,对于子节点是情况一而言,父节点拿到子结点的路径原创 2020-06-16 12:21:05 · 274 阅读 · 0 评论 -
二叉树根到叶子结点数字之和
题目描述: 认为二叉树的根到每个叶子结点的路径上的点是一个数,若该条路径有三个结点,则表示的数为根结点节点的值乘100加下一结点值乘10加叶子结点的值。该问题是想求所有路径构成数的和。 如上二叉树,其三条路径表示的数分别为:124,135,136则应返回395。 解决思路: 算法一:看到这种问题最初的想法,不考虑性能只考虑实现,上来二话不说、直接DFS,将所有路径都求出来存入list...原创 2019-12-25 22:03:11 · 770 阅读 · 1 评论 -
二叉树展开为链表(leetcode114)
题目描述: 给定一个二叉树,原地将它展开为链表。 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 来源:力扣(LeetCode) 链接:https://leetcode-c...原创 2019-12-24 19:39:14 · 103 阅读 · 0 评论 -
路径总和II(leetcode113)(二叉树,DFS,回溯)
题目描述: 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明:叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \...原创 2019-12-23 22:10:56 · 182 阅读 · 0 评论 -
判断平衡二叉树
平衡二叉树的定义:对于任一结点,其左右子树高度之差不大于1。 因此解决该问题自然而然就想到改写求二叉树的高度的算法。 如下为求二叉树高度的算法 public int getHeight(TreeNode root) { if(root == null) { return 0; } int leftHe...原创 2019-12-23 16:20:10 · 117 阅读 · 0 评论 -
二叉树的四种遍历方式(递归+非递归)
关于二叉树的大多数算法题目都是与二叉树的遍历方式有关的,大都解决方案对二叉树的遍历改写即可。下面就主要介绍下二叉树的常用的四种遍历方式。 其中DFS(Depth-First-Search)的有三种分别为先序遍历,中序遍历及后序遍历,而使用BFS的只有层序遍历。 一.先序遍历 先序遍历的顺序为对于当前结点先访问其本身,再访问其左子树,最后访问其右子树。 递归实现由于过于简单就只给代码不加描述...原创 2019-12-22 11:54:13 · 178 阅读 · 0 评论 -
有序数组转化为二叉树(leetcode108)
题目: 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / /...原创 2019-12-22 10:42:15 · 244 阅读 · 0 评论 -
二叉树的序列化和反序列化
便于存储将二叉树等数据结构转化为字符串的形式的磁盘中存储,使用的时候再由字符串转换为二叉树结构即可。下文以先序遍历为例实现二叉树的序列化及反序列化。 此外由于结点val的长度未知,避免歧义,在序列化的过程中在每一个节点结束位置都插入 !字符;对于空元素也应使用一特殊字符‘#’标记。 序列化过程使用的就是二叉树的先序遍历,不过遍历过程中需将空值也存储起来。实现代码如下: publi...原创 2019-12-11 15:27:12 · 131 阅读 · 0 评论