zoukankan      html  css  js  c++  java
  • 链式二叉树的实现(Java)

    定义树节点:

    package 链式二叉树;
    
    public class TreeNode {
    
    	private Object data;
    	private TreeNode left;
    	private TreeNode right;
    	
    	public TreeNode() {
    		this.data = null;
    		this.left = null;
    		this.right = null;
    	}
    	
    	public TreeNode(Object data, TreeNode left, TreeNode right) {
    		this.data = data;
    		this.left = left;
    		this.right = right;
    	}
    	
    	public Object getData() {
    		return this.data;
    	}
    	public void setData(Object data) {
    		this.data = data;
    	}
    	
    	public TreeNode getLeft() {
    		return this.left;
    	}
    	
    	public void setLeft(TreeNode left) {
    		this.left = left;
    	}
    	public TreeNode getRight() {
    		return this.right;
    	}
    	public void setRight(TreeNode right) {
    		this.right = right;
    	}
    
    }
    

    二叉树实现:

    package 链式二叉树;
    
    public class BinaryTree {
    
    	
    	public TreeNode root;
    	
    	public BinaryTree(TreeNode root) {
    		this.root = root;
    	}
    	
    	public BinaryTree() {
    		this.root = null;
    	}
    	
    	public TreeNode getRoot() {
    		return this.root;
    	}
    	
    	public void setRoot(TreeNode root) {
    		this.root = root;
    	}
    	
    	//前序遍历
    	public void preorder(TreeNode root) {
    		if(root != null) {
    			System.out.println(root.getData());
    			preorder(root.getLeft());
    			preorder(root.getRight());
    		}
    	}
    	
    	//中序遍历
    	public void middleorder(TreeNode root) {
    		if(root != null) {
    			middleorder(root.getLeft());
    			System.out.println(root.getData());
    			middleorder(root.getRight());
    		}
    	}
    	
    	//后序遍历
    	public void postorder(TreeNode root) {
    		if(root != null) {
    			postorder(root.getLeft());
    			postorder(root.getRight());
    			System.out.println(root.getData());
    		}
    	}
    	
    	
    	//获得父节点
    	public TreeNode getParent(TreeNode ele) {
    		return (root == null || ele == ele) ? null : parent(root, ele);
    	}
    	private TreeNode parent(TreeNode root, TreeNode e) {
    		if(root == null) return null;
    		if(root.getLeft() == e || root.getRight() == e) return root;
    		TreeNode t;
    		return ((t = parent(root.getLeft(), e)) != null) ? t : parent(root.getRight(), e);
    	}
    	
    	
    	//获得节点个数
    	public int getSize() {
    		return length(root);
    	}
    	private int length(TreeNode root) {
    		return root == null ? 0 : (length(root.getLeft()) + length(root.getRight()) + 1);
    	}
    	
    	//获得树的深度
    	public int getDepth() {
    		return depth(root);
    	}
    	private int depth(TreeNode root) {
    		if(root == null) return 0;
    		int m = depth(root.getLeft());
    		int n = depth(root.getRight());
    		return m > n ? m+1 : n+1;
    	}
    	
    	
    	public static void main(String[] args) {
    		         TreeNode l12 = new TreeNode("left12", null, null);
    		         TreeNode r12 = new TreeNode("right12", null, null);
    		         TreeNode l22 = new TreeNode("left22", null, null);
    		         TreeNode r22 = new TreeNode("right22", null, null);
    		 
    		         TreeNode l1 = new TreeNode("left1", l12, r12);// 根节点左子树
    		         TreeNode r1 = new TreeNode("right1", l22, r22);// 根节点右子树
    		         TreeNode root = new TreeNode("root", l1, r1);// 创建根节点
    		 
    		         BinaryTree bt = new BinaryTree(root);
    //		         System.out.println("=======先序遍历======");
    //		         bt.preorder(bt.getRoot());
    //		         System.out.println("=======中序遍历======");
    //		         bt.middleorder(bt.getRoot());
    		         System.out.println("深度:"+ bt.getDepth());
    	}
    }
    
  • 相关阅读:
    摆花
    关于我的博客
    博客美化更新日志
    页面美化代码1.x
    本人已转至新博客!
    回归博客园
    退役快乐
    Luogu神贴合辑
    代码高亮预览
    NOIp2018普及组初赛解题报告
  • 原文地址:https://www.cnblogs.com/lishanlei/p/10707836.html
Copyright © 2011-2022 走看看