zoukankan      html  css  js  c++  java
  • 常用数据结构算法 : 完全二叉树判别

    import java.util.LinkedList;
    import java.util.Queue;
    
    /**********************************************************
     * 非递归方法,基本是层次遍历二叉树 依次检查每一个节点:
     * 1.当发现有一个节点的左子树为空,右子树不为空时 直接返回false.
     * 2.当发现有一个节点的左子树不为空,右子树为空时,置标志位为1。
     * 3.当发现有一个节点的左右子树均为空时,置标志位为1。
     **********************************************************/
    
    public class CompleteBinaryTree 
    {
        //检查一棵树是不是完全二叉树  
        public boolean checking(TreeNode root) 
        {
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            boolean flag = false; // 叶子结点
            TreeNode left;
            TreeNode right;
            queue.add(root);
            while (!queue.isEmpty()) {
                root = queue.poll();
                left = root.left;
                right = root.right;
                
                if ((flag && (left != null || right != null)) || (left == null && right != null)) {
                    // 如果之前层遍历的结点没有右孩子,且当前的结点有左或右孩子,直接返回false
                    // 如果当前结点有右孩子却没有左孩子,直接返回false
                    return false;
                }
                
                if (left != null) queue.offer(root.left);
                
                if (right != null)queue.offer(root.right);
                else flag = true; // 如果当前结点没有右孩子,那么之后层遍历到的结点必须为叶子结点
                
            }
            return true;
        }
    }
  • 相关阅读:
    Plugin with id 'com.android.application' not found.
    android studio ,Gradle DSL method not found: 'compile()'
    eclipse 插件未安装成功定位
    [转]jquery $(document).ready() 与window.onload的区别
    emmet
    前端
    qunit.js初试
    jquery-mockjax初试
    来自工程师的8项Web性能提升建议
    css 中两个class之间没有空格与有空格有什么区别
  • 原文地址:https://www.cnblogs.com/WellHold/p/7594436.html
Copyright © 2011-2022 走看看