• LeetCode897. 递增顺序查找树


    题目

    法一、自己

     1 class Solution {
     2 public:
     3     vector<int>res;
     4     TreeNode* increasingBST(TreeNode* root) {
     5         dfs(root);
     6         TreeNode* p = new TreeNode(0);
     7         TreeNode *cur = p;
     8         for(int i =0;i <res.size();i++){
     9             cur->val = res[i];
    10             //cur->right = new TreeNode(res[i]);
    11             if(i == res.size()-1) break;
    12             cur->right = new TreeNode();
    13             cur = cur->right;
    14         }
    15         return p;
    16     }
    17     void dfs(TreeNode* root){
    18         if(root!=NULL){
    19             dfs(root->left);
    20             res.push_back(root->val);
    21             dfs(root->right);
    22         }
    23     }
    24 };

    没有一次bug free直接A掉的原因是又忘记自己经常犯得一个错误,经常空指针赋值。

    第一次写,9-13行为 cur->val = res[i];   cur = cur->right;这样在循环里更新后的cur可能为空。

    所以先要创建一个右节点然后更新指针。并且最后一次不需要创建右节点,所以在最后一次

    循环控制。

    法二、类似链表中的创造哑节点的思想,就是创建一个头节点,之后并不是对访问结点更新,

    而是对它的右节点更新

     1 class Solution {
     2 public:
     3     vector<int>res;
     4     TreeNode* increasingBST(TreeNode* root) {
     5         dfs(root);
     6         TreeNode* p = new TreeNode(0);
     7         TreeNode *cur = p;
     8         for(int i =0;i <res.size();i++){
     9             cur->right = new TreeNode(res[i]);
    10             cur = cur->right;
    11         }
    12         return p->right;
    13     }
    14     void dfs(TreeNode* root){
    15         if(root!=NULL){
    16             dfs(root->left);
    17             res.push_back(root->val);
    18             dfs(root->right);
    19         }
    20     }
    21 };

    一定要学习这种做法

  • 相关阅读:
    S2T40,第五章
    S2T40,第四章,简答5
    sqlmap扫描发现注入点示例
    使用jenkins部署.net项目
    在线预览PDF插件
    Visual Studio 2019 License Key
    asp.net core mvc 中 ModelState.IsValid 值是fasle
    sql操作
    sql server 查找与替换 正则表达式 匹配
    asp.net redis 帮助类封装
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14272650.html
Copyright © 2020-2023  润新知