判断二叉树是否是搜索二叉树和完全二叉树
2017-11-27 09:55
549 查看
import java.util.*; //判断二叉树是否是搜索二叉树和完全二叉树 public class isTree{ //二叉树节点的定义 public static class Node{ public int value; public Node left; public Node right; public Node(int data) { this.value=data; } } //判断是否是搜索二叉树(中序遍历递增) public static boolean isBST(Node head) { if(head==null) { return true; } boolean res=true; Node pre=null; Node cur1=head; Node cur2=null; while(cur1!=null) { cur2=cur1.left; if(cur2!=null) { while(cur2.right!=null&&cur2.right!=cur1) { cur2=cur2.right; } if(cur2.right==null) { cur2.right=cur1; cur1=cur1.left; continue; }else { cur2.right=null; } } if(pre!=null&&pre.value>cur1.value) { res=false; } pre=cur1; cur1=cur1.right; } return res; } //判断是否是完全二叉树 /** (1)层序遍历所有节点 (2)当前节点有右孩子,没有左孩子 false (3)当前节点不是左右孩子都有,则为叶节点,否则false */ public static boolean isCBT(Node head) { if(head==null) { return true; } Queue<Node>queue=new LinkedList<Node>(); boolean leaf=false; Node l=null; Node r=null; queue.offer(head); while(!queue.isEmpty()) { head=queue.poll(); l=head.left; r=head.right; if((leaf&&(l!=null||r!=null))||(l==null&&r!=null)) { return false; } if(l!=null) { queue.offer(l); } if(r!=null) { queue.offer(r); } else { leaf=true; } } return true; } public static void main(String []args) { /** 4 2 6 1 3 5 */ Node head=new Node(4); head.left=new Node(2); head.right=new Node(6); head.left.left=new Node(1); head.left.right=new Node(3); head.right.left=new Node(5); System.out.println(isBST(head)); System.out.println(isCBT(head)); } }
相关文章推荐
- 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)
- 判断二叉树是否为完全二叉树
- 【面试题】判断一棵二叉树是否是完全二叉树
- 二叉树面试题—前,中,后序(非递归),判断是否为完全二叉树
- 【BST】判断一棵二叉树是否是搜索二叉树
- 如何判断二叉树是否为完全二叉树?
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 二叉树镜像(递归和非递归)+ 判断一棵二叉树是否是平衡二叉树+ 判断一棵树是否为完全二叉树
- 二叉树的链式存储结构 前序 后序 中序 层序遍历操作实现 判断是否完全二叉树
- 判断一棵二叉树是否为完全二叉树
- 第4章第1节练习题10 判断某二叉树是否为完全二叉树
- 判断二叉树是否是完全二叉树,求二叉树宽度
- 二叉树经典面试题4~判断一棵树是否是完全二叉树
- 判断二叉树是否为完全二叉树
- 剑指offer24判断某一序列是否是某一搜索二叉树的后续遍历结果
- 通过队列实现判断一棵二叉树是否为完全二叉树
- 二叉树系列五:判断二叉树是否为完全二叉树
- 数据结构——判断二叉树是否为完全二叉树
- 判断一颗二叉树是否是完全二叉树
- 判断一棵二叉树,是否是搜索二叉树