摘要: 题目: 解法: 基本思路是每次访问到叶子节点的时候,将已有的路径进行输出,可以用一个栈来存储,每次回溯的时候,节点出栈,然后访问至叶子节点时,对栈结构进行遍历即可,这里采用vector进行操作,其优势在于,可以直接采用下标进行访问! 1 /** 2 * Definition for a binary 阅读全文
posted @ 2020-05-02 16:06 梦醒潇湘 阅读(240) 评论(0) 推荐(0)
摘要: 题目: 解答: (递归) O(n) 当我们用递归去做这个题时不要被题目误导,应该要明确一点:这个函数的功能有三个:给定两个节点 p和 q (1)如果 p 和 q 都存在,则返回它们的公共祖先; (2)如果只存在一个,则返回存在的一个; (3)如果 p 和 q 都不存在,则返回NULL 本题说给定的两 阅读全文
posted @ 2020-05-02 15:48 梦醒潇湘 阅读(143) 评论(0) 推荐(0)
摘要: 题目: 解决: 方法一:递归 思路: 节点 p,q 的最近公共祖先(LCA)是距离这两个节点最近的公共祖先节点。在这里 最近 考虑的是节点的深度。下面这张图能帮助你更好的理解 最近 这个词的含义。 笔记:p 和 q其中的一个在 LCA 节点的左子树上,另一个在 LCA 节点的右子树上。 也有可能是下 阅读全文
posted @ 2020-05-02 15:42 梦醒潇湘 阅读(162) 评论(0) 推荐(0)
摘要: 题目: 解答: 通过构造 BST 的中序遍历序列,则第 k-1 个元素就是第 k 小的元素。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * 阅读全文
posted @ 2020-05-02 15:32 梦醒潇湘 阅读(186) 评论(0) 推荐(0)
摘要: 题目: 解答: 反转一颗空树结果还是一颗空树。对于一颗根为 rr,左子树为 \mbox{right}, 右子树为 \mbox{left} 的树来说,它的反转树是一颗根为 rr,左子树为{right} 的反转树,右子树为 {left} 的反转树的树。 1 /** 2 * Definition for 阅读全文
posted @ 2020-05-02 15:26 梦醒潇湘 阅读(184) 评论(0) 推荐(0)
摘要: 题目: 解答: 最简单的解决方法就是用递归一个一个的计算节点。 时间复杂度为O(N); 空间复杂度为O(d)=O(logN); 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * Tr 阅读全文
posted @ 2020-05-02 15:22 梦醒潇湘 阅读(160) 评论(0) 推荐(0)
摘要: 题目: 解答: 利用广度优先搜索进行层次遍历,记录下每层的最后一个元素。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode 阅读全文
posted @ 2020-05-02 15:18 梦醒潇湘 阅读(220) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : 阅读全文
posted @ 2020-05-02 15:08 梦醒潇湘 阅读(167) 评论(0) 推荐(0)
摘要: 题目: 解法: 方法一:递归实现 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode 阅读全文
posted @ 2020-05-02 15:03 梦醒潇湘 阅读(148) 评论(0) 推荐(0)
摘要: 题目: 解法:方法一:递归方法 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode( 阅读全文
posted @ 2020-05-02 14:30 梦醒潇湘 阅读(157) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : 阅读全文
posted @ 2020-05-02 13:16 梦醒潇湘 阅读(140) 评论(0) 推荐(0)
摘要: 题目: 解答: /* // Definition for a Node. class Node { public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next 阅读全文
posted @ 2020-05-02 13:11 梦醒潇湘 阅读(153) 评论(0) 推荐(0)
摘要: 题目: 解法: 1 /* 2 // Definition for a Node. 3 class Node { 4 public: 5 int val; 6 Node* left; 7 Node* right; 8 Node* next; 9 10 Node() : val(0), left(NUL 阅读全文
posted @ 2020-05-02 13:07 梦醒潇湘 阅读(135) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val( 阅读全文
posted @ 2020-05-02 13:04 梦醒潇湘 阅读(157) 评论(0) 推荐(0)
摘要: 题目: 解法: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : 阅读全文
posted @ 2020-05-02 13:01 梦醒潇湘 阅读(153) 评论(0) 推荐(0)
摘要: 题目: 解答: 声明一个变量记录已经经过的节点的值之和,每经过一个节点就加上这个节点的值,在叶子节点判断变量值是否为目标值。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * Tre 阅读全文
posted @ 2020-05-02 12:59 梦醒潇湘 阅读(129) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : 阅读全文
posted @ 2020-05-02 12:52 梦醒潇湘 阅读(158) 评论(0) 推荐(0)
摘要: 题目: 解答: 平衡二叉树要求左子树和右子树的高度相差为1,且左右子树都是平衡二叉树,显然要计算二叉树的高度的函数。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNod 阅读全文
posted @ 2020-05-02 12:46 梦醒潇湘 阅读(1194) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : 阅读全文
posted @ 2020-05-02 12:40 梦醒潇湘 阅读(257) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : 阅读全文
posted @ 2020-05-02 12:35 梦醒潇湘 阅读(487) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : 阅读全文
posted @ 2020-05-02 12:32 梦醒潇湘 阅读(167) 评论(0) 推荐(0)
摘要: 题目: 解答: 递归求解。 基本情况:先序与中序数组长度小于1时,返回NULL。 递归步骤:首先去欸的那个preorder的第一个元素一定是该树的root,再在inorder中找到该元素,标记为index,index左部分为左子树的中序,右部分为右子树的中序;随后,通过左右子树中序的长度(可能为0) 阅读全文
posted @ 2020-05-02 12:30 梦醒潇湘 阅读(152) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:递归的方法 可以很容易用递归解决这个问题,为什么呢?因为一个节点的左孩子和右孩子是该节点的子树。首先,计算左子树的最大高数,然后计算右子树的高度。 因此,当前节点的最大高度就是max(左子树的最大高度, 右子树的最大高度)+1。 基于以上事实,当前节点为空时,返回0;NULL 阅读全文
posted @ 2020-05-02 12:20 梦醒潇湘 阅读(169) 评论(0) 推荐(0)
摘要: 题目: 解答: 这个题目和上一题目没有太大的区别,设置一个标志位,以决定从左到右还是从右到左。 1 //小集合和大集合均OK 2 class Solution { 3 public: 4 vector<vector<int> > zigzagLevelOrder(TreeNode *root) 5 阅读全文
posted @ 2020-05-02 12:00 梦醒潇湘 阅读(202) 评论(0) 推荐(0)
摘要: 题目: 解法: 方法一: 1 void printLevel(BinaryTree *p, int level) 2 { 3 if (!p) 4 { 5 return; 6 } 7 if (level == 1) 8 { 9 cout << p->data << " "; 10 } 11 else 阅读全文
posted @ 2020-05-02 11:55 梦醒潇湘 阅读(135) 评论(0) 推荐(0)
摘要: 题目: 解法: 方法一:递归的方法 1 //小集合和大集合均OK 2 public class Solution 3 { 4 public boolean isSymmetric(TreeNode root) 5 { 6 if (root == null) 7 { 8 return true; 9 阅读全文
posted @ 2020-05-02 11:36 梦醒潇湘 阅读(174) 评论(0) 推荐(0)
摘要: 题目: 解答: 用树的遍历来检查。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNod 阅读全文
posted @ 2020-05-02 11:25 梦醒潇湘 阅读(149) 评论(0) 推荐(0)
摘要: 题目: 解法: 题目说一棵二叉搜索树中有两个节点位置错了,要在常数空间将其改正。想到的算法就是中序遍历二叉树... Space O(n)的方法就是自己用stack来模拟inorder traverse,然后将输出的结果存在一个vector里面,然后遍历vector找到冲突的对。 Space cons 阅读全文
posted @ 2020-05-02 11:22 梦醒潇湘 阅读(175) 评论(0) 推荐(0)
摘要: 题目: 解法: 方法一: 下面是brute force code,虽然不是很高效,但是可以工作。 1 bool isSubTreeLessThan(BinaryTree *p, int val) 2 { 3 if (!p) 4 { 5 return true; 6 } 7 return (p->da 阅读全文
posted @ 2020-05-02 11:08 梦醒潇湘 阅读(142) 评论(0) 推荐(0)
摘要: 题目: 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树。 示例: 输入: 3输出:[ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3]] 解释:以上的输出对应以下 5 种不同结构 阅读全文
posted @ 2020-05-02 10:49 梦醒潇湘 阅读(145) 评论(0) 推荐(0)
摘要: 题目: 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3 解法: 方法一: 用动态规 阅读全文
posted @ 2020-05-02 10:34 梦醒潇湘 阅读(169) 评论(0) 推荐(0)
摘要: 题目: 给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解法: 方法一:递归实现 1 /** 2 * Definition for a binary tree node. 3 阅读全文
posted @ 2020-05-02 10:20 梦醒潇湘 阅读(174) 评论(0) 推荐(0)