java代碼判斷二叉樹 判斷二叉樹是否為鏡像二叉樹java

驗(yàn)證:二叉樹的性質(zhì)3:n0=n2+1 用java驗(yàn)證

用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 判斷兩顆二叉樹是否相等

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è)二叉樹是不是合法的二分查找樹

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)

營(yíng)銷型網(wǎng)站建設(shè)