判断一颗二叉树是否是搜索二叉树和完全二叉树
2018-12-17 22:00
211 查看
[code]package com.jsp.tree; import java.util.LinkedList; import java.util.Queue; import java.util.Stack; import com.jsp.tree.PreInPosTraversal.Node; /** * BST * 判断 搜索二叉树 * @author jiangshipan * 对任何一个节点 左子树都比它小, 右字数都比他们大 * * 二叉树中序遍历 所有节点都是升序的都是搜索二叉树 (一般不出现重复节点) * * CBT * 完全二叉树: 1. 若一个节点有右孩子 而没有左节点 返回false * 2. 若一个节点 有左没右边,或两个都没有。则后面遇到的节点必须是叶子节点。 */ public class IsBSTAndCBT { 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) { int value = 0; //在中序遍历非递归 中修改 if (head != null) { Stack<Node> stack = new Stack<Node>(); while (!stack.isEmpty() || head != null) { if (head != null) { stack.push(head); head = head.left; } else { head = stack.pop(); //value 存放当前弹出的值 value = head.value; //peek获取当前栈顶的值 但不弹出 if (stack.peek().value < value) { return false; } head = head.right; } } } return true; } public static boolean isCBT(Node head) { if (head == null) { return true; } //(双向链表)linkedlist可以实现队列 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; //leaf = false; 该节点不是叶子节点 if ((leaf && (l != null || r != null)) || (l == null && r != null)) { return false; } if (l != null) { queue.offer(l); } if (r != null) { queue.offer(r); } if(l == null && r == null) { // l == null 可以不写。前面已经判断过了 ??? //表明是叶子节点 leaf = true; } } return true; } }
相关文章推荐
- 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)
- 判断二叉树是否是搜索二叉树和完全二叉树
- 判断一颗二叉树是否是完全二叉树
- 判断一颗二叉树是否是完全二叉树
- 判断一颗二叉树是否为平衡树
- 判断一颗二叉树是否对称
- 判断一棵二叉树是否为完全二叉树
- 判断一颗二叉树是否平衡
- 判断一个节点是否在一棵二叉树中和判断一颗二叉树是否是另一颗树的子树——题集(十二)
- 给定二叉树的前序和中序,判断是否可以构成一颗二叉树,如果可以输出后序
- 二叉树问题---判断一棵树是否为搜索二叉树
- 判断二叉树是否为完全二叉树的实例
- 判断一个二叉树是否是完全二叉树
- 百度笔试题:判断一个二叉树是否是另一颗二叉树的子树
- 怎么判断一颗二叉树是完全二叉树
- 二叉树问题---判断一棵树是否为完全二叉树
- 判断一个节点是否在一棵二叉树中&&判断一颗二叉树是是否是另一颗树的子树
- 判断一颗二叉树树是否为AVL树
- 判断一颗二叉树是否为平衡二叉树(AVL)
- 剑指offer24判断某一序列是否是某一搜索二叉树的后续遍历结果