118. 杨辉三角
给定一个非负整数 *numRows,*生成「杨辉三角」的前 numRows 行。
在**「杨辉三角」**中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
提示:
1 <= numRows <= 30
直接模拟就可以
12345678910111213141516171819class Solution {public: vector<vector<int>> ans; vector<vector<int>> generate(int numRows) { ans.push_back({1}); for (int j = 1; j < numRows; j++) { vector<int> mid; ...
114. 二叉树展开为链表
给你二叉树的根结点 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 <= Node.val <= 100
**进阶:**你可以使用原地算法(O(1) 额外空间)展开这棵树吗?
观察结果,每个节点右孩子都是前序遍历的下一个节点
所以只需要在前序遍历期间更新当前节点右孩子即可
12345678910111213141516171819202122232425class Solution {public: void flatten(TreeNode *root) ...
108. 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。
示例 1:
**输入:**nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
示例 2:
**输入:**nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
提示:
1 <= nums.length <= 10(4)
-10(4) <= nums[i] <= 10(4)
nums 按 严格递增 顺序排列
递归构造,每次选择中间的元素作为根节点
左右子树再继续递归构造
123456789101112131415class Solution {public: TreeNode *sortedArrayToBST(vector<int> &nums) { return ToBST(nums, 0, nums.size()); & ...
105. 从前序与中序遍历序列构造二叉树
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
示例 1:
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]
示例 2:
输入: preorder = [-1], inorder = [-1]
输出: [-1]
提示:
1 <= preorder.length <= 3000
inorder.length == preorder.length
-3000 <= preorder[i], inorder[i] <= 3000
preorder 和 inorder 均 无重复 元素
inorder 均出现在 preorder
preorder 保证 为二叉树的前序遍历序列
inorder 保证 为二叉树的中序遍历序列
123456789101112131415161718192021222324252627282930class ...
104. 二叉树的最大深度
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
**输入:**root = [3,9,20,null,null,15,7]
**输出:**3
示例 2:
**输入:**root = [1,null,2]
**输出:**2
提示:
树中节点的数量在 [0, 10(4)] 区间内。
-100 <= Node.val <= 100
分别递归左右子树,取最大值即可
或者用层序遍历
1234567891011121314151617181920212223class Solution {public: int maxDepth(TreeNode *root) { if (root == nullptr) return 0; queue<TreeNode *> q; q.push(root); int ans = 0; while (!q.empty()) { ...
102. 二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
**输入:**root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
**输入:**root = [1]
输出:[[1]]
示例 3:
**输入:**root = []
输出:[]
提示:
树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000
12345678910111213141516171819202122232425class Solution {public: vector<vector<int>> levelOrder(TreeNode *root) { if (root == nullptr) return {}; vector<vector<int>> ans; queue<Tre ...








