结点类Node.java
/*
* Copyright (c) 2020.版权所有高金磊
*/
package orther.树相关;
class Node<T>{
T val;
Node left,right;
Node(T val){
this.val=val;
}
}
二叉树的操作和测试用例–忽略空结点
```java
/*
* Copyright (c) 2020.版权所有高金磊
*/
package orther.树相关;
import java.util.*;
/**平衡二叉树非空结点的遍历和复原
* 二叉树复原中,中序还原最为繁琐,使用二分查找的思想即可(即为数据的最中间)
* 还原先根遍历的结果时,每次弹出栈顶元素添加即可,而后根每次从数据栈的栈底
*
* 对于本文没有的带有空结点的(非平衡二叉树的)每次遇到null的时候当成元素添加,并保证要添加的结点不是null即可
*
* 两个二叉树是否相等则可以按照任何方式遍历得到遍历的结果,判断结果是否相同即可(不是最优解)
*
* @param <T>
*/
public class 各种遍历和还原 <T> {
/** 通过数组构造二叉树--如果数组排序就是二叉搜索树--结果是平衡树
*
* @param arrays 二叉树的值的集合,支持任何object
* @return 二叉树的根节点
*/
protected Node build_BinarySearchTree_fromArray(T[] arrays){
return build_BinarySearchTree_fromArray_Plus(arrays,0, arrays.length-1);
}
/**
* 通过数组和指定的数组范围构造二叉树--如果数组排序就是二叉搜索树--结果是平衡树
*
* @param start -数组的起始位置 闭区间
* @param end 数组的结束位置 闭区间
* @return 二叉树的根节点
*/
protected Node build_BinarySearchTree_fromArray_Plus(T[] arrays,int start,int end)
{
if (start>end)
return null;
if (start==end)
return new Node<T>(arrays[start]);
int middle=(start+end)/2;
Node<T> node=new Node<T>(arrays[middle]);
node.left=build_BinarySearchTree_fromArray_Plus(arrays,start, middle-1);
node.right=build_BinarySearchTree_fromArray_Plus(arrays,middle+1, end);
return node;
}
/**
* 二叉树广度优先遍历的结果
* @param root
* @return
*/
protected List<T> hierarchical_Traversal(Node<T> root){