二叉树的先根,中根,层次遍历以及还原-java

结点类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){
   

        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高金磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值