博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Binary Tree Longest Consecutive Sequence
阅读量:6305 次
发布时间:2019-06-22

本文共 2430 字,大约阅读时间需要 8 分钟。

Binary Tree Longest Consecutive Sequence

题目链接:

这一个类型的题都一样用dfs,分治的思想。两种方式:一种用global variable,另一种直接把sequence的长度作为返回值,思路都一样。也可以直接在当前层对左右节点分别处理,本质和前面一样的。iteration也可以解,用stack或者queue来做,但是本质都是dfs。

1.用global variable

public int longestConsecutive(TreeNode root) {        /* dfs         * arguments: curNode, previous value, length         * 2 chooses: 1. curNode.val >= previous_value => length + 1         *            2. curNode.val < previous_value  => length = 1         * update length each recursion: use a global variable         */         if(root == null) return 0;         dfs(root, root.val - 1, 0);         return global;    }        int global = 0;    private void dfs(TreeNode curNode, int previous_value, int len) {        // update global length        global = Math.max(global, len);        // base case        if(curNode == null) {            return;        }                if(curNode.val - previous_value == 1) len++;        else len = 1;        dfs(curNode.left, curNode.val, len);        dfs(curNode.right, curNode.val, len);    }

2.用返回值

public int longestConsecutive(TreeNode root) {        /* dfs         * arguments: curNode, previous value, length         * 2 chooses: 1. curNode.val >= previous_value => length + 1         *            2. curNode.val < previous_value  => length = 1         * update length each recursion: return the max length         */         if(root == null) return 0;         return dfs(root, root.val - 1, 0);    }        private int dfs(TreeNode curNode, int previous_value, int len) {        // base case        if(curNode == null) {            return len;        }                if(curNode.val - previous_value == 1) len++;        else len = 1;        return Math.max(len, Math.max(dfs(curNode.left, curNode.val, len), dfs(curNode.right, curNode.val, len)));    }

3.在当前层处理分别处理左右节点,这样不用传上一次的值,注意这样初始的len就是1了:

public int longestConsecutive(TreeNode root) {         if(root == null) return 0;         dfs(root, 1);         return global;    }        int global = 0;    private void dfs(TreeNode curNode, int len) {        global = Math.max(global, len);                if(curNode.left != null) {            if(curNode.val + 1 == curNode.left.val) dfs(curNode.left, len+1);            else dfs(curNode.left, 1);        }        if(curNode.right != null) {            if(curNode.val + 1 == curNode.right.val) dfs(curNode.right, len+1);            else dfs(curNode.right, 1);        }    }

转载地址:http://clixa.baihongyu.com/

你可能感兴趣的文章
教你如何使用Flutter和原生App混合开发
查看>>
Spring Boot 整合redis
查看>>
CSS hover改变背景图片过渡动画生硬
查看>>
JDBC(三)数据库连接和数据增删改查
查看>>
淘宝应对"双11"的技术架构分析
查看>>
ssh
查看>>
订单的子单表格设置颜色
查看>>
Office365 Exchange Hybrid 番外篇 ADFS后端SQL群集(一)
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
lvs fullnat部署手册(三)rs内核加载toa篇
查看>>
C++策略模式
查看>>
我的友情链接
查看>>
oracle表分区详解
查看>>
网络编程中常见结构体
查看>>
SSL/TLS原理详解
查看>>
Docker 自定义SSH服务镜像
查看>>
JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改
查看>>
configure: error: in `/root/httpd-2.2.11/srclib/apr': c
查看>>
CentOS7搭建Kubernetes-dashboard管理服务
查看>>
buildroot下查找外部编译器通过ext-toolchain-wrapper调用的参数
查看>>