美文网首页leetcode articles
Check Completeness Of A Binary T

Check Completeness Of A Binary T

作者: gattonero | 来源:发表于2018-12-17 17:27 被阅读27次

    问题

    判断一棵树是否是完全二叉树

    思路

    观察测试数据
    [1,2,3,4,5,6]

    [1,2,3,4,5,null,7]

    [1,2,3,4,5,null]
    从给的测试数据可以看出,只要是连续的数字中间没有空,或者只在最后有空,那么就是完全二叉树。所以可以给节点编号,再看看编号有没有按序排列

    解决

        public boolean isCompleteTree(TreeNode root) {
            Map<Integer,TreeNode> map = new HashMap<>();
            codeTree(root,map,1);
            List<Integer> list = map.keySet().stream().sorted().collect(Collectors.toList());
            for (int i = 1; i < list.size(); i++) {
                if(list.get(i)-1!=list.get(i-1))
                    return false;
            }
            return true;
        }
    
        public void codeTree(TreeNode root,Map<Integer,TreeNode> map,Integer code){
             map.put(code,root);
             if(root.left!=null){
                 codeTree(root.left,map,code*2);
             }
    
            if(root.left!=null){
                codeTree(root.right,map,code*2+1);
            }
        }
    

    思路

    继续看所给的测试数据,考虑到这种形式是对完全二叉树进行层次遍历得来的,所以按照层次遍历后,只要空节点是连续的,那就是完全二叉树

    解决

        public boolean isCompleteTree2(TreeNode root) {
            Queue<TreeNode> queue = new LinkedList();
            queue.offer(root);
            while(queue.peek()!=null){
                TreeNode node = queue.poll();
                queue.offer(node.left);
                queue.offer(node.right);
            }
    
            while(!queue.isEmpty()){
                if(queue.poll()!=null)
                    return false;
            }
            return true;
        }
    

    相关文章

      网友评论

        本文标题:Check Completeness Of A Binary T

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