654. 最大二叉树

解题步骤:

1、确定递归函数的参数和返回值

TreeNode* constructMaximumBinaryTree(vector<int>& nums)
2、确定终止条件
1 TreeNode* node = new TreeNode(0);
2 if (nums.size() == 1) {
3     node->val = nums[0];
4     return node;
5 }

当传入数组大小为1时,说明已经遍历到叶子结点,遍历结束,返回叶子节点。

3、确定单层递归的逻辑

  ①找到最大值,记录值和索引,并以此为根节点;

 1 int maxValue = 0;
 2 int maxValueIndex = 0;
 3 for (int i = 0; i < nums.size(); i++) {
 4     if (nums[i] > maxValue) {
 5         maxValue = nums[i];
 6         maxValueIndex = i;
 7     }
 8 }
 9 TreeNode* node = new TreeNode(0);
10 node->val = maxValue;

  ②构造左子树;

1 if (maxValueIndex > 0) {
2     vector<int> newVec(nums.begin(), nums.begin() + maxValueIndex);
3     node->left = constructMaximumBinaryTree(newVec);
4 }

  ③构造右子树。

1 if (maxValueIndex < (nums.size() - 1)) {
2     vector<int> newVec(nums.begin() + maxValueIndex + 1, nums.end());
3     node->right = constructMaximumBinaryTree(newVec);
4 }

617. 合并二叉树

递归法解题步骤:

1、确定递归函数参数和返回值

TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2)
2、确定递归结束的条件
        if (root1 == nullptr) return root2;
        if (root2 == nullptr) return root1;
3、确定递归单层的逻辑
       root->val = root1->val + root2->val;
代码如下:
 1 class Solution {
 2 public:
 3     TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
 4         if (root1 == nullptr) return root2;
 5         if (root2 == nullptr) return root1;
 6         //重新定义根节点
 7         TreeNode* root = new TreeNode(0);
 8         root->val = root1->val + root2->val;
 9         root->left = mergeTrees(root1->left, root2->left);
10         root->right = mergeTrees(root1->right, root2->right);
11         return root;
12     }
13 };

700. 二叉搜索树中的搜索

代码如下:

 1 class Solution {
 2 public:
 3     TreeNode* searchBST(TreeNode* root, int val) {
 4         queue<TreeNode*> que;
 5         if (root != nullptr) que.push(root);
 6         while(!que.empty()){
 7             int size = que.size();
 8             while (size--){
 9                 TreeNode* node = que.front();
10                 que.pop();
11                 if (node->val == val){
12                     return node;
13                 }
14                 if (node->left) que.push(node->left);
15                 if (node->right) que.push(node->right);
16             }
17         }
18         return nullptr;
19     }
20 };

98. 验证二叉搜索树

 1 class Solution {
 2 private:
 3     vector<int> vec;
 4     void traversal(TreeNode* root) {
 5         if (root == NULL) return;
 6         traversal(root->left);
 7         vec.push_back(root->val); // 将二叉搜索树转换为有序数组
 8         traversal(root->right);
 9     }
10 public:
11     bool isValidBST(TreeNode* root) {
12         vec.clear(); // 不加这句在leetcode上也可以过,但最好加上
13         traversal(root);
14         for (int i = 1; i < vec.size(); i++) {
15             // 注意要小于等于,搜索树里不能有相同元素
16             if (vec[i] <= vec[i - 1]) return false;
17         }
18         return true;
19     }
20 };

 

原文地址:http://www.cnblogs.com/zsqy/p/16800588.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性