zoukankan      html  css  js  c++  java
  • 中序遍历 恢复BST 树

    恢复BST

    题目描述
    二叉搜索树(BST)中的两个节点被错误地交换了,
    请在不改变树的结构的情况下恢复这棵树。
    备注;
    用O(n)的空间解决这个问题的方法太暴力了,你能设计一个常数级空间复杂度的算法么?
    示例 1:

    输入: [1,3,null,null,2]

    1
    /
    3

    2

    输出: [3,1,null,null,2]

    3
    /
    1

    2
    说明:本题目包含复杂数据结构TreeNode,点此查看相关信息

    
    typedef TreeNode Node;
    class Solution {
    public:
        void recoverTree(TreeNode *root) {
            pre=a=b=NULL;
            dfs(root);
            
            if(a&& b  && a->val > b->val) swap(a->val,b->val);
            
        }
        Node* pre=NULL,* a=NULL,* b=NULL;
        
        void dfs(Node* root) {
            if(root==NULL) return;
            dfs(root->left);
            if(pre) {
                if(pre->val > root->val) {
                    if(!a) a = pre;
                    b = root;
                }
            }
            pre = root;
            dfs(root->right);
            
            
        }
        
        
    };
    
    

    判断二叉树

    判断给出的二叉树是否是一个二叉搜索树(BST)
    二叉搜索树的定义如下
    一个节点的左子树上节点的值都小于自身的节点值
    一个节点的右子树上节点的值都大于自身的节点值
    所有节点的左右子树都必须是二叉搜索树
    如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读
    我们用如下方法将二叉树序列化:
    二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。

    判断二叉树

    
    typedef TreeNode Node;
    class Solution {
    public:
        /**
         * 
         * @param root TreeNode类 
         * @return bool布尔型
         */
        bool isValidBST(TreeNode* root) {
            bool isBST=true;
            Node* pre =NULL;
            return dfs(pre,isBST,root),isBST;
            
        }
        
        void dfs(Node* & pre,bool &isBST,Node* root) {
            if(root==NULL) return;
            dfs(pre,isBST,root->left);
            if(pre) {
                if(pre->val >= root->val) 
                {
                    isBST = false;
                    return;
                }
               
            }
            
            pre = root;
            dfs(pre,isBST,root->right);
        }
        
        
    };
    
    
  • 相关阅读:
    任意数字 保留 两位 小数 PHP
    在JavaScript中处理JSON数据 jquery js 定义 json 格式
    相对定位 绝对定位 relative absolute position 图片定位a标签
    oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子
    python
    python
    python-判断alter是否存在
    python-IE浏览器调用
    Python语言编写脚本时,对日期控件的处理方式
    python报错UnicodeDecodeError:
  • 原文地址:https://www.cnblogs.com/lyr-2000/p/14326715.html
Copyright © 2011-2022 走看看