zoukankan      html  css  js  c++  java
  • 【数据结构--二叉树】Java递归实现二叉树遍历

    参考链接:https://www.cnblogs.com/yaobolove/p/6213936.html

    这有一棵树:

    1、节点对象

    package com.tree.mybinarytree;
    /**
     * 二叉树TreeNode,每个node代表树中的一个节点
     * @author ZX
     * @date   2018年7月
     */
    public class Node {
    	//左边子节点
    	private Node leftNode;
    	//右边子节点
    	private Node rightNode;
    	//节点数据
    	private String data;
    	
    	
    	
    	//getset
    	public Node getLeftNode() {
    		return leftNode;
    	}
    	public void setLeftNode(Node leftNode) {
    		this.leftNode = leftNode;
    	}
    	public Node getRightNode() {
    		return rightNode;
    	}
    	public void setRightNode(Node rightNode) {
    		this.rightNode = rightNode;
    	}
    	public String getData() {
    		return data;
    	}
    	public void setData(String data) {
    		this.data = data;
    	}
    	//constructor
    	public Node() {}
    	public Node(Node leftNode,Node rightNode,String data) {
    		this.leftNode=leftNode;
    		this.rightNode=rightNode;
    		this.data=data;
    	}
    	
    	
    	
    }
    

    2、测试类

    package com.tree.mybinarytree;
    
    /**
     * 1、组装树 2、遍历树 3、测试
     * 
     * @author zx
     *
     */
    public class TreeTest {
    	public static void main(String[] args) {
    		//按照图片组装树
    		Node G = new Node(null, null, "G");
    
    		Node F = new Node(null, null, "F");
    
    		Node E = new Node(null, null, "E");
    
    		Node D = new Node(null, null, "D");
    
    		Node C = new Node(F, G, "C");
    
    		Node B = new Node(D, E, "B");
    
    		Node A = new Node(B, C, "A");
    		//遍历
    		System.out.println("先序遍历");
    		theFirstTraversal(A);
    		System.out.println("");
    		System.out.println("中序遍历");
    		theInOrderTraversal(A);
    		System.out.println("");
    		System.out.println("后序遍历");
    		thePostOrderTraversal(A);
    		System.out.println("");
    
    	}
    
    	public static void printNode(Node node) {
    		System.out.print(node.getData());
    	}
    
    	/**
    	 * 先序遍历
    	 * @param root
    	 */
    	public static void theFirstTraversal(Node root) { // 先序遍历
    		printNode(root);
    		if (root.getLeftNode() != null) { // 使用递归进行遍历左孩子
    			theFirstTraversal(root.getLeftNode());
    		}
    		if (root.getRightNode() != null) { // 递归遍历右孩子
    			theFirstTraversal(root.getRightNode());
    		}
    	}
    	/**
    	 * 中序遍历
    	 * @param root
    	 */
    	public static void theInOrderTraversal(Node root) { // 中序遍历
    		if (root.getLeftNode() != null) {
    			theInOrderTraversal(root.getLeftNode());
    		}
    		printNode(root);
    		if (root.getRightNode() != null) {
    			theInOrderTraversal(root.getRightNode());
    		}
    	}
    	/**
    	 * 后序遍历
    	 * @param root
    	 */
    	public static void thePostOrderTraversal(Node root) { // 后序遍历
    		if (root.getLeftNode() != null) {
    			thePostOrderTraversal(root.getLeftNode());
    		}
    		if (root.getRightNode() != null) {
    			thePostOrderTraversal(root.getRightNode());
    		}
    		printNode(root);
    	}
    
    }
    

    由于二叉查找树可以任意构造,同样的值,可以构造出很少分支的二叉查找树,显然这棵二叉树的查询效率和顺序查找差不多。若想二叉查找数的查询性能最高,需要这棵二叉查找树是平衡的,也即平衡二叉树(AVL树)

  • 相关阅读:
    Java后端WebSocket的Tomcat实现
    Shiro session和Spring session一样吗?
    HTTP请求类
    JSP页面中的时间显示问题
    Oracle在linux中相关设置操作
    关于BigDecimal类型在jsp页面中进行除法运算问题
    Spring与Redis的实现
    gson介绍
    busybox介绍
    vsftp中426 Failure writing network stream的错误解决
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054112.html
Copyright © 2011-2022 走看看