二叉树节点定义
public class Node {
int data;
Node leftChild;
Node rightChild;
}
一些二叉树的操作
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
public class Test {
public static void main(String[] args) {
Node root=null;
root=create(root);
System.out.println("============");
preOrder(root);
System.out.println("depth:"+depth(root));
System.out.println("leaves:"+leaves(root));
// exchange(root);
preOrder(root);
widthOrder(root);
}
//创建二叉树
@SuppressWarnings("resource")
public static Node create(Node root){
Scanner scanner=new Scanner(System.in);
int i;
i=scanner.nextInt();
if(i==-1){
root=null;
return null;
}
if(root==null){
root=new Node();
root.data=i;
}
root.leftChild=create(root.leftChild);
root.rightChild=create(root.rightChild);
return root;
}
//前序遍历二叉树
public static void preOrder(Node root){
if(root!=null){
System.out.print(root.data+" ");
preOrder(root.leftChild);
preOrder(root.rightChild);
}
}
//求二叉树深度
public static int depth(Node root){
if(root==null)
return 0;
int a=depth(root.leftChild);
int b=depth(root.rightChild);
return a>b?a+1:b+1;
}
//求二叉树叶子数
public static int leaves(Node root){
if(root==null)
return 0;
if(root.leftChild==null&&root.rightChild==null)
return 1;
return leaves(root.leftChild)+leaves(root.rightChild);
}
//翻转二叉树
public static void exchange(Node root){
if(root==null)
return;
Node temp=root.leftChild;
root.leftChild=root.rightChild;
root.rightChild=temp;
exchange(root.leftChild);
exchange(root.rightChild);
}
//层次遍历二叉树
public static void widthOrder(Node root){
Queue<Node> queue=new LinkedList<Node>();
if(root==null)
return;
queue.add(root);
while(queue.size()>0){
Node temp=queue.poll();
System.out.print(temp.data+" ");
if(temp.leftChild!=null)
queue.add(temp.leftChild);
if(temp.rightChild!=null)
queue.add(temp.rightChild);
}
}