树
ryontang
这个作者很懒,什么都没留下…
展开
-
树路径总和_回溯_双重DFS
112. 路径总和 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 主要思路: 假定从根节点到当前节点的值之和为 val,我们可以将这个大问题转化为一个小问题:是否存在从当前节点的子节点到叶子的路径,满足其路径和为 sum - val 不难发现这满足递归的性质,若当前节点就是叶子节点,那么我们直接判断 sum 是否等于 val 即可(因为路径和已经原创 2020-07-26 20:51:49 · 152 阅读 · 0 评论 -
镜像二叉树/对称
226. 翻转二叉树 这道题用递归来写会比较号理解 主要思路是: 新建一个节点,用先序遍历,node = new TreeNode(root->val); node->left的左子数=root->右子树,当然是在root->右子树有的情况下 node右子树=root左子树 TreeNode* invertTree(TreeNode* root) { // 递归出口 if(root == NULL) return NULL;原创 2020-07-25 11:18:58 · 285 阅读 · 0 评论 -
二叉树的最大深度、最短路径等
leetcode104. 二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数 // DFS class Solution { public: int maxDepth(TreeNode* root) { // 递归出口 if(!root) return 0; return 1+max(maxDepth(root->left), maxDepth(root->right)); }原创 2020-07-23 22:20:11 · 321 阅读 · 0 评论 -
剑指32从上到下打印二叉树
剑指32a:从上到下打印二叉树 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 vector<int> levelOrder(TreeNode* root) { // 考察树的层次遍历 vector<int> res; if(root == null) return res; queue<TreeNode*> q; q.push(root->val); // 根节点先入队 while(!q.empty()) { TreeN.原创 2020-07-23 22:07:44 · 72 阅读 · 0 评论 -
leetcode297 树的序列化与反序列化
leetcode297 二叉树的序列化与反序列化 public class Codec { // 把一颗二叉树序列化成字符串 public string serialize(TreeNode root) {} // 把字符串反序列化成二叉树 public TreeNode deserialize(string data) {} } 二、前序遍历解法 void traverse(TreeNode root) { i原创 2020-07-23 09:29:48 · 156 阅读 · 0 评论 -
重建二叉树
剑指 Offer 07. 重建二叉树 主要思想: 方法:分治思想 经验总结:二叉树的问题一般都是分治思想,递归去做。因为二叉树本身就是递归定义的 整体的思路是: 前序序列获取根节点,映射到中序序列,区分左右子树的长度 将左右子数的长度输入前序序列,那么该左右子数在前序序列中就可以知道根节点,再把这个根节点传入中序序列中 递归 // 新建一个Map,存中序序列,方便查找根节点在中序序列中的位置 unordered_map<int, int> Map; TreeNode* buildTree原创 2020-07-24 21:28:52 · 61 阅读 · 0 评论 -
二叉数公共祖先
235. 二叉搜索树的最近公共祖先 主要思路:见图 分为了三种大情况,如图所示: 情况一,p,q都在当前根节点左侧 情况二,p,q都在当前根节点右侧 情况三,: p,q有一个是另一个的公共祖先 遍历到p,q公共祖先 ...原创 2020-07-25 09:08:04 · 129 阅读 · 0 评论