判斷一棵樹是否是完全二叉樹


根據完全二叉樹的定義,如果二叉樹上某個結點有右孩子無左孩子則一定不是完全二叉樹;否則如果二叉樹上某個結點有左孩子而沒有右孩子,那么該結點所在的那一層上,該結點右側的所有結點應該是葉子結點,否則不是完全二叉樹。

import java.util.LinkedList;
import java.util.Queue;
public class tmp {
	public static class Node{  //一個靜態內部類
		int data;
		Node left;
		Node right;
		public Node(int data) {
			this.data = data;
		}
	}
	public static boolean isCompleteBtree(Node root) {
		if(root == null) {
			return true;
		}
		Queue<Node> queue = new LinkedList<Node>();
		queue.offer(root);
		boolean leaf = false;
		while(!queue.isEmpty()) {
			Node node = queue.poll();
			//左空右不空
			if(node.left == null && node.right != null) {
				return false;
			}
			//如果開啟了葉子結點階段,結點不能有左右孩子
			if(leaf && (node.left != null || node.right != null)) {
				return false;
			}
			//將下一層要遍歷的加入到隊列中
			if(node.left != null) {
				queue.offer(node.left);
			}
			if(node.right != null) {
				queue.offer(node.right);
			} else {
				leaf = true;
			}
		}
		return true;
	}
	public static void main(String[] args) {
		Node root = new Node(1);
		root.left = new Node(2);
		root.right = new Node(3);
		root.left.right = new Node(4);
		System.out.println(isCompleteBtree(root));
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM