根据中序遍历和前序遍历构建二叉树

一下序列组合能唯一确定一棵唯一的二叉树:

  • 中序和前序
  • 中序和后序
  • 中序和层次

下面就来说说通过中序和前序序列构造二叉树:
1、从前序序列中取一个元素,然后将前序序列索引加一(注意将其定义为静态变量)
2、根据所选元素的值,创建一个新的树节点(root)
3、查找所选结点在中序序列中的索引,用遍历tempIndex标记
4、递归调用BuildBinaryTree为tempIndex之前的所有结点构建一棵子树,并将其作为root的左子树
5、递归调用BuildBinaryTree为tempIndex之后的所有结点构建一课子树,并将其作为root的右子树
6、返回root

参数解释:
inOrder:中序序列数组
preOrder:前序序列数组
inStart:在中序遍历中查找所选结点的起始位置
inEnd:在中序遍历序列中查找所选结点的结束位置
代码如下:

@SuppressWarnings("unchecked")
public static<T> BinaryTreeNode<T> buildBinaryTree(Object[] inOrder, Object[] preOrder, int inStart, int inEnd){
        if(inStart > inEnd){
            return null;
        }
        T temp = (T)preOrder[preIndex];
        preIndex++; // 前序序列索引加一,此变量为静态成员变量,不在方法中
        BinaryTreeNode<T> root = new BinaryTreeNode<T>(temp);
        if(inStart == inEnd){
            return root;
        }
        int tempindex = 0;
        for(int i = inStart; i <= inEnd; ++i){ // 查找temp在中序遍历序列中的位置
            if((T)inOrder[i] == temp){
                tempindex = i;
                break;
            }
        }
        root.setLeft(buildBinaryTree(inOrder, preOrder, inStart, tempindex-1));
        root.setRight(buildBinaryTree(inOrder, preOrder, tempindex+1, inEnd));
        return root;

}

完整代码可以访问我的GitHub:https://github.com/StriverLi/Data-Structures-and-Algorithms-in-Java/blob/master/src/tree/BinaryTreeNode.java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值