二叉树的创建(前序中序创建二叉树、中序后序创建二叉树)

来源:互联网 发布:吉林11选5遗漏数据 编辑:程序博客网 时间:2024/06/05 23:32

前序中序创建二叉树:
preOrder:{1,2,4,7,3,5,6,8}
inOrder:{4,7,2,1,5,3,8,6}

  • 找到中序中和先序相同的节点(i=3)、leftLen=i、rightLen=len-leftLen-1;
  • 将先序和中序分为两半,递归调用:(preS+1,inS,leftLen,preorder,inorder) 和 (preS+leften+1,ins+leftlen+1,rightlen.preorder,inorder)

递归实现:

public static TreeNode createTree(int preS,int inS,int length,int[]preorder,int[]inorder){        if (preorder == null || preorder.length ==0){            return null;        }        TreeNode node = new TreeNode(preorder[preS]);        if(length ==1 && preorder[preS] == inorder[inS])            return node;        int i = 0;        //找到分界点        while (i <=length-1 && preorder[preS]!= inorder[inS+i])            i++;        //左半边长度        int leftLen = i;        //右半边长度        int rightLen = length-leftLen-1;        if(leftLen>=1){            node.left=createTree(preS+1,inS,leftLen,preorder,inorder);        }        if(rightLen>=1){            node.right=createTree(preS+leftLen+1,inS+leftLen+1,rightLen,preorder,inorder);        }        return node;    }

中序后序创建二叉树:
inOrder:{4,7,2,1,5,3,8,6}
postOrder={7,4,2,5,8,6,3,1}

  • 找到中序中和后序相同的节点(i=3);
  • 将中和后序分为两半,递归调用:(inS,postE-rightLen-1,leftLen,inorder,postorder)、createTree(inS+leftLen+1,postE-1,rightLen,inorder,postorder)

递归实现:

public  TreeNode createTree(int inS,int postE,int length,int[]inorder,int[]postorder){        if (inorder == null || inorder.length ==0){            return null;        }        TreeNode node = new TreeNode(postorder[postE]);        if(length ==1 && inorder[inS] == postorder[postE])            return node;        int i = 0;        //找到分界点        while (i <=length-1 && postorder[postE]!= inorder[inS+i])            i++;        //左半边长度        int leftLen = i;        //右半边长度        int rightLen = length-leftLen-1;        if(leftLen>=1){            node.left=createTree(inS,postE-rightLen-1,leftLen,inorder,postorder);        }        if(rightLen>=1){            node.right=createTree(inS+leftLen+1,postE-1,rightLen,inorder,postorder);        }        return node;    }
0 0