利用先序和中序遍历结果构造二叉树

利用先序和中序遍历结果构造二叉树(默认没有重复元素)

//定义树节点类
class TreeNode {
     int val;
    TreeNode left;
      TreeNode right;
  TreeNode(int x) { val = x; }
  }
public class Test{
      int pre_idx=0;//指定前序数组目前访问的节点
      int[] preorder;//在helper函数中需要使用
      int[] inorder;//在helper函数中需要使用
      Map<Integer,Integer> map= new HashMap<Integer,Integer>();//为后面通过前序遍历的获得的根节点来分割获得左右子树
      public TreeNode buildTree(int[] preorder, int[] inorder) {
          this.inorder=inorder;
          this.preorder=preorder;
          for(int i=0;i<inorder.length;i++)
          {
              map.put(inorder[i],i);
          }
          return helper(0,inorder.length-1);
      }
      //使用一个函数,该函数的功能是返回给定的中序遍历数组的根节点,因此应传入左索引与右索引
      public TreeNode helper(int in_left,int in_right)
      {
          if(in_left>in_right)
              return  null;
          int root_val = preorder[pre_idx++];
          TreeNode root = new TreeNode(root_val);
          int index =  map.get(root_val);
          root.left=helper(in_left,index-1);
          root.right=helper(index+1,in_right);
          return root;
      }
发布了22 篇原创文章 · 获赞 0 · 访问量 596

猜你喜欢

转载自blog.csdn.net/qq_44932835/article/details/105008022
今日推荐