二叉树的相关操作(递归)

来源:互联网 发布:做代码的软件 编辑:程序博客网 时间:2024/06/02 01:37

二叉树节点定义

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);    }    }


 

 

0 0
原创粉丝点击