博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断二叉树是否为搜索二叉树和完全二叉树
阅读量:4042 次
发布时间:2019-05-24

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

DESC:

题目描述

给定一棵二叉树,已知其中没有重复值的节点,请判断该二叉树是否为搜索二叉树和完全二叉树。

示例1

输入

{2,1,3}

返回值

[true,true]

备注:

n≤500000

假设一个二叉搜索树具有如下特征:

    节点的左子树只包含小于当前节点的数。

    节点的右子树只包含大于当前节点的数。
    所有左子树和右子树自身必须也是二叉搜索树。

百度百科中对完全二叉树的定义如下:

若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)

 

CODE1:

JAVA:

import java.util.*;/* * public class TreeNode { *   int val = 0; *   TreeNode left = null; *   TreeNode right = null; * } */public class Solution {    /**     *      * @param root TreeNode类 the root     * @return bool布尔型一维数组     */    public boolean[] judgeIt (TreeNode root) {        // write code here        //这个地方用的long型,是防止节点值正好是int型边界,leetcode int是不通过的,牛客可以        boolean isSearchTree = checkSearchTree(root, Long.MIN_VALUE, Long.MAX_VALUE);        boolean isWholeTree = checkWholeTree(root);        return new boolean[]{isSearchTree, isWholeTree};    }        public boolean checkSearchTree(TreeNode node, long min, long max) {            if (node == null) {                return true;            }            //注意这个地方,根据题意,相等为false,所以为>=和<=            if (node.val <= min || node.val >= max) {                return false;            }            return checkSearchTree(node.left, min, node.val) && checkSearchTree(node.right, node.val, max);        }        public boolean checkWholeTree(TreeNode node) {            LinkedList
nodeList = new LinkedList<>(); if (node == null) { return false; } nodeList.offer(node); while (true) { TreeNode pop = nodeList.pop(); if (pop == null) { break; } nodeList.offer(pop.left); nodeList.offer(pop.right); } for (TreeNode nt : nodeList) { if (nt != null) { return false; } } return true; }}

 

 

NOTES1:

  1. 搜索树,通过限定左右子树的值域来判断
  2. 完全二叉树通过bfs进行判断,层序遍历后,当遇到null时,表明最后一个节点也遍历完了,如果是完全二叉树,那队列剩余的应该都是空节点,否则不是完全二叉树;

 

CODE2:

import java.util.*;/* * public class TreeNode { *   int val = 0; *   TreeNode left = null; *   TreeNode right = null; * } */public class Solution {    /**     *      * @param root TreeNode类 the root     * @return bool布尔型一维数组     */    public boolean[] judgeIt (TreeNode root) {        // write code here        boolean isSearchTree = checkSearchTree(root, null, null);        boolean isWholeTree = checkWholeTree(root);        return new boolean[]{isSearchTree, isWholeTree};    }        public boolean checkSearchTree(TreeNode node, TreeNode minNode, TreeNode maxNode) {            if (node == null) {                return true;            }            if ((minNode!= null && node.val <= minNode.val) || (maxNode!= null && node.val >= maxNode.val)) {                return false;            }            return checkSearchTree(node.left, minNode, node) && checkSearchTree(node.right, node, maxNode);        }        public boolean checkWholeTree(TreeNode node) {            Queue
queue = new LinkedList<>(); if (node == null) { return false; } queue.offer(node); boolean flag = false; //这里循环条件不一样 while (!queue.isEmpty()) { TreeNode temp = queue.poll(); if (temp == null) { flag = true; continue; } if (flag) { //按说已经到尾结点了,后面又有非空节点,说明非完全二叉树 return false; } queue.offer(temp.left); queue.offer(temp.right); } return true; }}

 NOTES2:

  1. 相比code1, 搜索树值域直接传的是node,其值为区间值,递归中会自动封装应有的最大值和最小值;
  2. 完全二叉树,在bfs中一次判断,不在后续判断,其实和code1思路一样,只是合在了一起

 

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

你可能感兴趣的文章
媒体广告业如何运用云盘提升效率
查看>>
企业如何运用企业云盘进行数字化转型-实现新发展
查看>>
司法如何运用电子智能化加快现代化建设
查看>>
设计行业运用企业云盘能带来什么样的变化
查看>>
企业云盘如何让能源电力行业乘上数字化发展列车
查看>>
GEE学习笔记 六十四:绿色中国报告(个人版)
查看>>
GEE学习笔记 六十五:GEE的Python版API说明文档(英文版)
查看>>
GEE学习笔记 六十六:GEE的Python版教程规划大纲
查看>>
GEE学习笔记 六十七:【GEE之Python版教程一】GEE学习背景介绍
查看>>
GEE学习笔记 六十八:【GEE之Python版教程二】配置Python开发环境
查看>>
GEE学习笔记 六十九:【GEE之Python版教程三】Python基础编程一
查看>>
GEE学习笔记 七十:【GEE之Python版教程四】Python基础编程二
查看>>
GEE学习笔记 七十一:【GEE之Python版教程五】Python基础编程三
查看>>
GEE学习笔记 七十二:【GEE之Python版教程六】命令行简介
查看>>
GEE学习笔记 七十三:【GEE之Python版教程七】静态展示影像和动态展示影像
查看>>
GEE学习笔记 七十五:【GEE之Python版教程九】数值
查看>>
GEE学习笔记 七十六:【GEE之Python版教程十】字典
查看>>
GEE学习笔记 七十七:GEE学习方法简介
查看>>
GEE学习笔记 七十八:干涸的洪泽湖
查看>>
GEE学习笔记 七十九:【GEE之Python版教程十一】列表
查看>>