用java驗(yàn)證二叉樹性質(zhì) : n0 = n2 + 1
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供巢湖網(wǎng)站建設(shè)、巢湖做網(wǎng)站、巢湖網(wǎng)站設(shè)計(jì)、巢湖網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、巢湖企業(yè)網(wǎng)站模板建站服務(wù),十余年巢湖做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
代碼如下
package org.link.tree;
/**
* 樹節(jié)點(diǎn)
* @author link
*
*/
class TreeNode
{
int data;
TreeNode lchild ; // 左子節(jié)點(diǎn)
TreeNode rchild ; // 右子節(jié)點(diǎn)
public int getData()
{
return data;
}
public TreeNode getLchild()
{
return lchild;
}
public TreeNode getRchild()
{
return rchild;
}
public void setNode(int data,TreeNode lc,TreeNode rc){
this.data = data;
lchild = lc;
rchild = rc;
}
public TreeNode(){
}
}
class Counter{
public static int count=0;
}
public class TreeTest
{
static int n0; // 0度節(jié)點(diǎn)
static int n2; // 2度節(jié)點(diǎn)
/**
* 根據(jù)傳入?yún)?shù)創(chuàng)建二叉樹
* @param root
* @param a
* @param i
* @return
*/
public static TreeNode createTree(TreeNode root, int[]a, int i)
{
if(i a.length)
{
if(a[i] == 0)
{
root = null;
}
else
{
TreeNode tl = new TreeNode();
TreeNode tr = new TreeNode();
root.setNode(a[i],createTree(tl,a,++(Counter.count)),createTree(tr,a,++(Counter.count)));
}
}
return root;
}
/**
* 遍歷二叉樹,記錄n0 和 n2
* @param root
*/
public static void traverse(TreeNode root)
{
int degree = 0;
if(root != null)
{
if(root.getLchild() != null)
degree++;
if(root.getRchild() != null)
degree++;
if(degree == 0){
n0++;
}else if(degree == 2){
n2++;
}
traverse(root.getLchild());
traverse(root.getRchild());
}else{
}
}
public static void main(String[] args)
{
int[] a = {1,2,3,0,0,4,0,0,5,0,0}; // 這是你傳入的任意二叉樹數(shù)組
TreeNode root = new TreeNode();
root = createTree(root,a,Counter.count);
traverse(root);
System.out.println("n0:" + n0 + ",n2:" + n2);
// 驗(yàn)證n0=n2+1
if(n0 == n2 + 1){
System.out.println("n0=n2+1");
}else{
System.out.println("輸入節(jié)點(diǎn)數(shù)組有誤");
}
}
}
java 判斷兩個(gè)二叉樹是否完全相同
包括了創(chuàng)建二叉樹,前序遍歷輸出(遞歸),比較二叉樹是否相同。
[java] view plain copy
package com.yuxin.learn;
import java.util.LinkedList;
public class Main {
private static int[] a1 = { 1, 2, 3, 4, 5, 6 };
private static int[] a2 = { 1, 2, 5, 6, 7 };
private static int[] a3 = { 1, 2, 5, 6, 7 };
private static int[] a4 = { 1, 2, 5, 6, 7, 5, 6 };
private static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}
public static TreeNode createTree(int a[]) {
int len = a.length;
// 將數(shù)組的值依次轉(zhuǎn)為Node節(jié)點(diǎn)
LinkedListTreeNode list = new LinkedListTreeNode();
for (int i = 0; i len; i++){
list.add(new TreeNode(a[i]));
}
for (int i = 0; i len / 2 - 1; i++) {
list.get(i).left = list.get(i * 2 + 1);
list.get(i).right = list.get(i * 2 + 2);
}
// 最后一個(gè)父節(jié)點(diǎn)可能沒(méi)有右邊孩子
int last = len / 2 - 1;
list.get(last).left = list.get(last * 2 + 1);
if (len % 2 == 1) {
list.get(last).right = list.get(last * 2 + 2);
}
return list.get(0);
}
//遞歸前序遍歷輸出二叉樹
public static void preOder(TreeNode head){
System.out.print(head.val+" ");
if(head.left!=null) preOder(head.left);
if(head.right!=null) preOder(head.right);
}
//遞歸判斷兩個(gè)二叉樹是否相同
public static boolean isSameTree(TreeNode head1, TreeNode head2) {
if ((head1 == null head2 != null) || (head1 != null)
(head2 == null) || (head1.val != head2.val))
return false;
if (head1.left == null head1.right == null head2.left == null
head2.right == null head1.val == head2.val)
return true;
return isSameTree(head1.left, head2.left)
isSameTree(head1.right, head2.right);
}
public static void main(String[] args) {
TreeNode head1 = createTree(a1);
System.out.println("Tree1:");
preOder(head1);
System.out.println();
TreeNode head2 = createTree(a2);
System.out.println("Tree2:");
preOder(head2);
System.out.println();
TreeNode head3 = createTree(a3);
System.out.println("Tree3:");
preOder(head3);
System.out.println();
TreeNode head4 = createTree(a4);
System.out.println("Tree4:");
preOder(head4);
System.out.println();
System.out.println("Tree1和Tree2相同嗎?" + isSameTree(head1, head2));
System.out.println("Tree2和Tree3相同嗎?" + isSameTree(head2, head3));
System.out.println("Tree3和Tree4相同嗎?" + isSameTree(head3, head4));
}
}
java判斷一個(gè)二叉樹是不是合法的二分查找樹
/* 判斷一個(gè)二叉樹是不是合法的二分查找樹的簡(jiǎn)單的遞給方法,學(xué)習(xí)
* 采用自頂向下的遍歷方式,對(duì)于每個(gè)節(jié)點(diǎn),檢查頂部傳來(lái)的范圍要求,
* 要求是指:對(duì)于左子樹,父節(jié)點(diǎn)的值就是最大值,對(duì)于右子樹,父節(jié)點(diǎn)的值就是最小值
*/
public boolean isValidBST(TreeNode root) {
//初始的時(shí)候,對(duì)根節(jié)點(diǎn)沒(méi)有范圍要求
return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
}
public boolean isValidBST(TreeNode root, long minVal, long maxVal) {
if (root == null) return true;
//檢查是否滿足根節(jié)點(diǎn)的范圍要求
if (root.val = maxVal || root.val = minVal)
return false;
//修改對(duì)子節(jié)點(diǎn)的要求,對(duì)于左子樹,本節(jié)點(diǎn)的值就是最大值,對(duì)于右子樹,本節(jié)點(diǎn)的值就是最小值
return isValidBST(root.left, minVal, root.val) isValidBST(root.right, root.val, maxVal);
網(wǎng)頁(yè)標(biāo)題:java代碼判斷二叉樹 判斷二叉樹是否為鏡像二叉樹java
標(biāo)題網(wǎng)址:http://muchs.cn/article2/ddcjdoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、微信小程序、虛擬主機(jī)、Google、網(wǎng)站維護(hù)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)