您的位置:首页 > 编程语言 > Java开发

java计算二叉树的高度以及叶节点个数

2014-11-23 16:06 295 查看
java实现二叉树的相关操作

代码如下

package 二叉树有关;

import java.util.ArrayDeque;

import java.util.Queue;

public class CreateTree {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Node root=new Node();

root.data=9;

Node temp01=new Node();

temp01.data=1;

root.left=temp01;

Node temp02=new Node();

temp02.data=3;

root.right=temp02;

Node temp03=new Node();

temp03.data=2;

root.left.left=temp03;

Node temp04=new Node();

temp04.data=4;

root.left.right=temp04;

Node temp05=new Node();

temp05.data=8;

root.right.left=temp05;

Node temp06=new Node();

temp06.data=6;

root.left.left.left=temp06;

Node temp07=new Node();

temp07.data=7;

root.left.left.right=temp07;

System.out.println("--------先序遍历----------");

SelectTree1(root);

System.out.println();

System.out.println("---------中序遍历---------");

SelectTree(root);

System.out.println();

System.out.println("---------后序遍历---------");

SelectTree2(root);

System.out.println();

System.out.println("----------叶节点个数-----------");

int i=leafNum(root);

System.out.println(i);

System.out.println("----------层次遍历二叉树-----------------");

levelOrder(root);

System.out.println();

int j=deep(root);

System.out.println("---------高度---------");

System.out.println(j);

}

// 中序遍历

public static void SelectTree(Node root){

if(root==null)

return;

SelectTree(root.left);

System.out.print(root.data+" ");

SelectTree(root.right);

}

// 先序遍历

public static void SelectTree1(Node root){

if(root==null)

return;

System.out.print(root.data+" ");

SelectTree1(root.left);

SelectTree1(root.right);

}

// 后序遍历

public static void SelectTree2(Node root){

if(root==null)

return;

SelectTree2(root.left);

SelectTree2(root.right);

System.out.print(root.data+" ");

}

// 叶子数

public static int leafNum(Node node) {

if (node != null) {

if (node.left == null && node.right == null) {

return 1;

}

return leafNum(node.left)+leafNum(node.right);

}

return 0;

}

//求二叉树的深度

public static int deep(Node node){

int h1, h2;

if(node == null)

{return 0;

}

else{

h1= deep(node.left);

h2= deep(node.right);

return (h1<h2)?h2+1:h1+1;

}

}

// 层次遍历

public static void levelOrder(Node node) {

if (node == null)

return;

Queue<Node> queue = new ArrayDeque<Node>();

queue.add(node);

while (!queue.isEmpty()) {

Node temp = queue.poll();

System.out.print(temp.data);

if (temp.left != null)

queue.add(temp.left);

if (temp.right != null)

queue.add(temp.right);

}

}

}

class Node{

boolean visited=false;

int data=0;

Node left=null;

Node right=null;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐