zoukankan      html  css  js  c++  java
  • 平衡二叉树、搜索二叉树及完全二叉树

    平衡二叉树:一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

    判断标准:如果以每一个点作为头结点的树都是平衡树,则整棵树是平衡树

    (1)左树是否平衡

    (2)右树是否平衡

    (3)再都是平衡情况下,左树高度?

    (4)再都是平衡情况下,右树高度?

    进阶:树形DP

    搜索二叉树:是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

     1、如何判断一棵树是否为搜索二叉树:

     2、如何判断一棵树是否为完全二叉树:(1)二叉树按层遍历,一个节点有右孩子没左孩子,一定不是完全二叉树。

                     (2)如果一个节点它不是左右两个孩子都全,它后面遇到的节点都必须是叶节点

    3、已知一棵完全二叉树,求其节点个数:先遍历左边界,就可以求出树的高度(2^l-1),然后遍历右子树的左边界,看右子树的左边界有没有到最后一层,如果有到,说明头结点的左子树是满二叉树,然后可以对右子树进行递归,因为这又是一棵完全二叉树。如果没到说明头结点的右子树是满二叉树,只是会少一层,而左子树是完全二叉树,可以对左子树递归。

    public static class Node {
            public int value;
            public Node left;
            public Node right;
    
            public Node(int data) {
                this.value = data;
            }
        }
    
        public static int nodeNum(Node head) {
            if (head == null) {
                return 0;
            }
            return bs(head, 1, mostLeftLevel(head, 1));
        }
    
        public static int bs(Node node, int l, int h) {
            if (l == h) {
                return 1;
            }
            if (mostLeftLevel(node.right, l + 1) == h) {
                return (1 << (h - l)) + bs(node.right, l + 1, h);   //位运算,等价于2^(h-l)
            } else {
                return (1 << (h - l - 1)) + bs(node.left, l + 1, h);
            }
        }
    
        public static int mostLeftLevel(Node node, int level) {
            while (node != null) {
                level++;
                node = node.left;
            }
            return level - 1;
        }
  • 相关阅读:
    【转】Linux中的特殊权限粘滞位(sticky bit)详解
    【转】Spark实现行列转换pivot和unpivot
    Pyspark 使用 Spark Udf 的一些经验
    CDH 集群机器上部署 Jupyter notebook 使用 Pyspark 读取 Hive 数据库
    Pyspark-SQL 官方 API 的一些梳理(上)
    Kafka-python 客户端导致的 cpu 使用过高,且无法消费消息的问题
    如何创建和管理 MySQL 相关权限
    CDH Yarn 调度资源指南
    Sqoop export(Hive to MySQL) 的一些 reference
    vue2.x学习笔记(二十七)
  • 原文地址:https://www.cnblogs.com/roscangjie/p/11046242.html
Copyright © 2011-2022 走看看