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

落日映苍穹つ 2022-06-17 08:38 257阅读 0赞
  1. /**
  2. * Definition for binary tree
  3. */
  4. public class TreeNode {
  5. int val;
  6. TreeNode left;
  7. TreeNode right;
  8. TreeNode(int x) { val = x; }
  9. }
  10. public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
  11. //创建新节点
  12. TreeNode node = new TreeNode(0);
  13. //判断是否为空
  14. if (pre.length == 0 || in.length == 0){
  15. return null;
  16. }else {
  17. node.val = pre[0];
  18. }
  19. int[] p_left,p_right,left_num,right_num;
  20. for (int j = 0; j < in.length; j++) {
  21. if (pre[0] == in[j]){
  22. //获取前序遍历左子树 p_left = Arrays.copyOfRange(pre,0,j); 数组复制范围
  23. p_left = new int[j];
  24. for (int k = 0; k < j; k++) {
  25. p_left[k] = pre[k+1];
  26. }
  27. //获取前序遍历右子树
  28. p_right = new int[pre.length -j-1];
  29. for (int k = 0; k < pre.length -j-1; k++) {
  30. p_right[k] = pre[k+j+1];
  31. }
  32. //获取中序遍历左子树
  33. left_num = new int[j];
  34. for (int k = 0; k < j; k++) {
  35. left_num[k] = in[k];
  36. }
  37. //获取中序遍历右子树
  38. right_num = new int[in.length-j-1];
  39. for (int k = 0; k < in.length-j-1; k++) {
  40. right_num[k] = in[k+j+1];
  41. }
  42. node.left = reConstructBinaryTree(p_left,left_num);
  43. node.right = reConstructBinaryTree(p_right,right_num);
  44. }
  45. }
  46. return node;
  47. }

发表评论

表情:
评论列表 (有 0 条评论,257人围观)

还没有评论,来说两句吧...

相关阅读