zoukankan      html  css  js  c++  java
  • 333.Largest BST Subtree

        /*
         * 333.Largest BST Subtree
         * 2016-3-27 by Mingyang
         * 这个题目我的思路,自底向上的方法非常正确的!但是,这个题目独特的一点就在于对于一个
         * Tree是不是BST得判断,他必须表示对左子树的最大的还大,右子树的最小的还要小,所以这样看来就是
         * 必须要保证root必须保存当前子树1.isBST?2.left smallest.3.right biggest.4.node number
         * 可以先建一个class,也可以做一个array
         */
          public int largestBSTSubtree(TreeNode root) {
                if( root == null ) return 0;
                int [] ret = dfs1( root );
                return ret[3];
            }
            private int[] dfs1( TreeNode node ) {
                int[] l = new int[]{ 1, node.val, node.val, 0 }; //isBst, min, max, numNodesBST
                int[] r = new int[]{ 1, node.val, node.val, 0 };
                if( node.left != null ) l = dfs1 ( node.left );
                if( node.right != null ) r = dfs1( node.right );
                boolean isBst = l[0] == 1 && r[0] == 1 && node.val >= l[2] && node.val <= r[1];
                int numBstNodes = isBst ? 1 + l[3] + r[3] : Math.max( l[3], r[3] );
                return new int[]{ isBst ? 1 : 0, l[1], r[2], numBstNodes };
            }  
  • 相关阅读:
    1. Window环境下
    A-Frame 简介03
    A-frame_02
    A-Frame_简单介绍
    iOS_UIWebView加载本地html文件路径问题
    AVAudioRecorder 录制音频
    内存管理, 对象的生命周期
    02-socket编程
    01-socket第三方库 AsyncSocket(GCDAsyncSocket)
    01-MKNetworkKit介绍及使用
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5658945.html
Copyright © 2011-2022 走看看