美文网首页
二叉树的相关概念和解题套路

二叉树的相关概念和解题套路

作者: 我是啵啵 | 来源:发表于2020-02-26 22:08 被阅读0次

判断一棵二叉树是否是搜索二叉树:

解 : 中序遍历 然后遍历之后 的顺序是升序的 就是平衡二叉树;
在遍历过程中把打印行为 换成 和前一个节点比较大小的行为;

判断二叉树是否是完全二叉树:

解:

  1. 在宽度搜索过程中 任意一节点有右无左就不是
    2.第一个节点左右不双全 则剩下的所有都是 叶节点;
package tree;

import java.util.LinkedList;

public class wanquantree {
    public static class Node {
        public int value;
        public Node left;
        public Node right;

        public Node(int data) {
            this.value = data;
        }
    }


    //二叉树的宽度优先遍历
    static boolean width(Node root) {
        if (root == null) {
            return false;
        }
        LinkedList<Node> queue = new LinkedList<Node>();
        queue.add(root);
        boolean isleaf = false;
        while (!queue.isEmpty()) {
            Node node = queue.poll();
            Node l = node.left;
            Node r = node.right;
            System.out.print(node.value);
            if ((l == null && r != null)       //左边为空 右边不为空
                    ||
                    (isleaf && (l != null || r != null))      //是叶节点了 并且 还有节点有孩子
            ) {
                return false;
            }
            if (node.left != null) {
                queue.add(node.left);
            }
            if (node.right != null) {
                queue.add(node.right);
            }
            if (l == null || r == null) {//在遍历过程中是否到了叶节点
                isleaf = true;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        Node node = new Node(1);
        Node node2 = new Node(2);
        Node node3 = new Node(3);
        Node node4 = new Node(4);

        node.left = node2;
        node.right = node3;
        node2.left = node4;

        boolean width = width(node);
        System.out.println();
        System.out.println(width);
    }


}

判断树是不是平衡二叉树

package tree;

public class banlance {
    public static class Node {
        public int value;
        public Node left;
        public Node right;

        public Node(int data) {
            this.value = data;
        }
    }

    public static boolean isBalanced(Node head) {
        return process(head,0).isBalanced;
    }

    public static class ReturnType {//封装返回信息
        public boolean isBalanced;
        public int height;

        public ReturnType(boolean isB, int hei) {
            isBalanced = isB;
            height = hei;
        }

    }

    public static ReturnType process(Node x,int height) {
        if (x == null) {
            return new ReturnType(true, height);//返回true 和得到的高度
        }
        ReturnType leftData = process(x.left,height+1);
        ReturnType rightData = process(x.right,height+1);
        height = Math.max(leftData.height, rightData.height);//黑盒 左右的最大高度
        boolean isBalanced = leftData.isBalanced && rightData.isBalanced
                && Math.abs(leftData.height - rightData.height) < 2;// 左右是平衡 并且 左右高度 相差小于2
        return new ReturnType(isBalanced, height);
    }

    public static void main(String[] args) {
        Node node = new Node(1);
        Node node2 = new Node(2);
        Node node3= new Node(3);
//        Node node4= new Node(4);
//        Node node5= new Node(5);

        node.left=node2;
        node.right=node3;
//        node3.left=node4;
//        node4.right=node5;
        ReturnType process = process(node,0);
        System.out.println(process.isBalanced+""+process.height);
//        System.out.println(isBalanced(node));

    }

}


用returntype封装信息 按照总能向左右子树要信息 并组装返回

相关文章

  • 1.5 二叉树(4)

    二叉树相关问题解题套路 广度优先遍历(BFS:Breath First Search)、深度优先遍历(DFS:De...

  • 二叉树的相关概念和解题套路

    判断一棵二叉树是否是搜索二叉树: 解 : 中序遍历 然后遍历之后 的顺序是升序的 就是平衡二叉树;在遍历过程中把...

  • 3 树

    树的基本概念 定义和基本术语 基本性质 逻辑表示方式 二叉树 定义和相关概念 特殊的二叉树 性质 存储结构 抽象数...

  • 二叉树的基本概念与遍历方法实现

    一、二叉树的相关概念 概念:二叉树是n个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两颗互不相...

  • 【PHP数据结构】完全二叉树、线索二叉树及树的顺序存储结构

    在上篇文章中,我们学习了二叉树的基本链式结构以及建树和遍历相关的操作。今天我们学习的则是一些二叉树相关的概念以及二...

  • 教学方法

    总方针 1.掌握各学科的概念公式定律等基础知识,通过典型例体了解相关知识的运用及基本的解题方法和解题方法和技巧 2...

  • 看到这张图片,大家看得终归是分数

    初中十二年,取得了一定的成绩,是因为我一直在教授解题的套路和方法。到了小学,我开始找讲课的套路和方法。解题是帮助学...

  • 构建求和树——二叉树的构建及遍历

    一、相关概念 二、题目 题目 思路 利用二叉树的前序、中序遍历序列构建二叉树,并遍历构建好的二叉树。 利用递归的思...

  • 《剑指Offer》-26.树的子结构

    题干 输入两棵二叉树A和B,判断B是不是A的子结构。二叉树节点定义如下: 二叉树A 二叉树B 解题思路 获取B的根...

  • 二叉树基本知识

    二叉树基本知识 本文主要介绍二叉树的基本概念和分类。如有不正确之处请多指正。 树的相关定义 什么是树 树是 N 个...

网友评论

      本文标题:二叉树的相关概念和解题套路

      本文链接:https://www.haomeiwen.com/subject/inxichtx.html