zoukankan      html  css  js  c++  java
  • 【编程之美】java二进制实现重建

    package com.cn.binarytree.utils;
    
    /**
     * @author 刘利娟 liulijuan132@gmail.com
     * @version 创建时间:2014年7月20日 下午2:03:30 类说明:
     */
    class Node {
    	Node left;
    	Node right;
    	char chValue;
    
    	Node(char chValue) {
    		left = null;
    		right = null;
    		this.chValue = chValue;
    	}
    }
    
    public class Rebuild {
    	public static final int TREELEN = 6; // 树的节点数
    
    	void rebuild(char[] preOrder, char[] inOrder, int treeLen, Node root) {
    		if (preOrder == null || inOrder == null) { // 前序遍历序列或中序遍历序列为空
    			return;
    		}
    		Node temp = new Node(preOrder[0]);// 获取前序遍历序列的第一个节点
    		System.out.println("当前节点:" + preOrder[0]);
    		if (root == null) { // 假设根节点为空,则把当前节点复制给根节点
    			root = temp;
    		}
    
    		if (treeLen == 1) {
    			return;
    		}
    
    		int i = 0;
    
    		while (i < inOrder.length) { // 在inOrder中找到与preOrder[0]相等的节点
    			if (preOrder[0] != inOrder[i]) {
    				i++;
    			} else {
    				break;
    			}
    		}
    
    		int leftLen = i;
    		System.out.println("左子树长度:" + leftLen);
    		int rightLen = inOrder.length - leftLen - 1;
    		System.out.println("右子树长度:" + rightLen);
    
    		if (leftLen > 0) {
    			for (int j = 0; j < preOrder.length - 1; j++) {
    				preOrder[j] = preOrder[j + 1];
    			}
    			char[] leftOrder = new char[leftLen];
    			System.out.print("左子树:");
    			for (int j = 0; j < leftLen; j++) {
    				leftOrder[j] = inOrder[j];
    				System.out.print(leftOrder[j] + "	");
    			}
    			System.out.println();
    			rebuild(preOrder, leftOrder, leftLen, root.left);
    		}
    		if (rightLen > 0) {
    			for (int j = 0; j < preOrder.length - 1; j++) {
    				preOrder[j] = preOrder[j + 1];
    			}
    			char[] rightOrder = new char[rightLen];
    			System.out.print("右子树:");
    			for (int j = 0; j < rightLen; j++) {
    				rightOrder[j] = inOrder[j + leftLen + 1];
    				System.out.print(rightOrder[j] + "	");
    			}
    			System.out.println();
    			rebuild(preOrder, rightOrder, rightLen, root.right);
    		}
    	}
    
    	public static void main(String[] args) {
    		char[] pre = { 'a', 'b', 'd', 'c', 'e', 'f' };
    		char[] in = { 'd', 'b', 'a', 'e', 'c', 'f' };
    		new Rebuild().rebuild(pre, in, TREELEN, null);
    	}
    
    }
    
    java实现重建二叉树:二叉树遍历序列和序列定序遍历,二进制重建。


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    C 应用
    C 基本语法
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4676121.html
Copyright © 2011-2022 走看看