【数据结构】二叉树-二叉树类别

满二叉树

如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。

 

完全二叉树

1.如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。

2.相同深度的满二叉树的所有结点(不包含叶子)在该树上都有相应的节点(包含叶子)与之对应且所有左子树先存在,才会存在右子树,然后才会存在下层子树的情况,这样的树为完全二叉树 。

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

作者:是小王吖🐅
链接:https://www.nowcoder.com/discuss/394880861177475072
来源:牛客网

import java.util.*;
 
/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */
 
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return bool布尔型
     */
    public static boolean isCompleted=true;
    public boolean isCompleteTree (TreeNode root) {
        // write code here
        if(root==null) return true;
       Deque<TreeNode> deque=new LinkedList<>();
       deque.offer(root);
       boolean flag=false;
        while(!deque.isEmpty()){
            TreeNode temp=deque.poll();
            if(temp==null){
                flag=true;
                continue;//调到下一个循环,查看后面是否还有元素
            }
            if(flag)return false;
            deque.offer(temp.left);
            deque.offer(temp.right);
        }
        return true;
         
    }
 
}

 

 二叉搜索树

又称为二叉排序树,具有以下的性质:

  • 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
  • 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
  • 它的左右子树也分别为二叉搜索树

二叉树的中序遍历的结果是有序的

 判断一个树是不是二叉排序树

import java.util.*;
 
/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */
 
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return bool布尔型
     */
     public boolean isValidBST(TreeNode root){
         //利用二叉搜索树的中序遍历是非递减数列的特性解题
         ArrayList<Integer> list=new ArrayList<>();
         inorderfun(root,list);
         if(root==null||(root.left==null&&root.right==null))return true;
         for(int i=1;i<list.size();i++){
             if(list.get(i)<list.get(i-1))
                 return false;
         }
         return true;
          
     }
    public void inorderfun(TreeNode node,ArrayList<Integer> list){
        if(node==null)return;
        inorderfun(node.left,list);
        list.add(node.val);
        inorderfun(node.right,list);
         
         
    }
}

 

 

 

 

posted @ 2022-08-30 22:00  王广元  阅读(19)  评论(0编辑  收藏  举报
分享到: