zoukankan      html  css  js  c++  java
  • 二叉树遍历算法

    二叉树是一种非线性的数据结构,在对它进行操作时,总是需要逐一对每个数据元素实施操作,这样就存在一个操作顺序问题,由此提出了二叉树的遍历操作。所谓遍历二叉树就是按某种顺序访问二叉树中的每个结点一次且仅一次的过程。这里的访问可以是输出、比较、更新、查看元素内容等等各种操作。

    在这里写了个二叉树遍历算法、根据三种不同的顺序得到三种不同的顺序结果、

    public class BinaryTree {
    	
    	int data;
    	BinaryTree left = null;
    	BinaryTree right = null;
    	
    	public BinaryTree(int data){
    		this.data = data;
    	}
    	
    	
    	public void insert(BinaryTree root,int data){//二叉树中插入子结点
    		
    		if(data<root.data){//二叉树左结点比根结点小
    			
    			if(root.left!=null){
    				insert(root.left, data);
    			}else{
    				root.left = new BinaryTree(data);
    			}
    		}else{//二叉树右结点比根结点大
    			if(root.right!=null){
    				insert(root.right, data);
    			}else{
    				root.right = new BinaryTree(data);
    			}
    			
    		}
    	}
    	
    	/**
    	 * 
    	 * @param root
    	 * @param order 遍历顺序
    	 * 1 先序	(根结点——>左结点——>右结点)
    	 * 2 中序	(左结点——>根结点——>右结点)
    	 * 3 后序	(左结点——>右结点——>根结点)
    	 */
    	public static void order(BinaryTree root ,int order){
    		
    		switch (order) {
    		case 1://先序 
    			
    			if(root!=null){
    				System.out.print(root.data+" --> ");
    				order(root.left,order);
    				order(root.right,order);
    			}
    			
    			break;
    		case 2://中序
    			
    			if(root!=null){
    				order(root.left,order);
    				System.out.print(root.data+" --> ");
    				order(root.right,order);
    			}
    			
    			break;
    		case 3://后序
    			
    			if(root!=null){
    				order(root.left,order);
    				order(root.right,order);
    				System.out.print(root.data+" --> ");
    			}
    			
    			break;
    
    		default:
    			break;
    		}
    	}
    	
    	
    	public static void main(String[] args) {
    		
    		int[] ints = {1,22,3,44,5,66,7,88,9,11};
    		  BinaryTree root = new BinaryTree(ints[0]);   //创建二叉树
    		  for(int i=1;i<ints.length;i++){
    		   root.insert(root, ints[i]);       //向二叉树中插入数据
    		  }
    		  System.out.println("
    先序遍历:");
    		  order(root, 1);
    		  System.out.println("
    中序遍历:");
    		  order(root, 2);
    		  System.out.println("
    后序遍历:");
    		  order(root, 3);
    	}
    
    }
    
    


    打印结果如下:

    先序遍历:
    1 --> 22 --> 3 --> 5 --> 7 --> 9 --> 11 --> 44 --> 66 --> 88 --> 
    中序遍历:
    1 --> 3 --> 5 --> 7 --> 9 --> 11 --> 22 --> 44 --> 66 --> 88 --> 
    后序遍历:
    11 --> 9 --> 7 --> 5 --> 3 --> 88 --> 66 --> 44 --> 22 --> 1 -->


  • 相关阅读:
    获取各种屏幕宽度、高度
    java中获取本地文件的编码
    线程通信与进程通信的区别
    女性长期没有性生活有什么危害?
    面试中你必须要知道的语言陷阱
    当项目出现空闲时候,如何开展软件测试工作?
    同样是做鸭的 绝味与周黑鸭的区别咋那么大?!
    javaIO(二)
    (原)代码块
    this的使用
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3233867.html
Copyright © 2011-2022 走看看