• 面试题6-重建二叉树


    面试题6-重建二叉树

    基础知识

    树是在编程中经常遇到的一种数据结构,它的逻辑结构很简单:除根节点外每个结点都有父节点,除叶子结点外每个结点都有一个或者多个子结点,父节点和子结点通过指针相连。在学习树的结构的时候,多是二叉树,也就是每个结点最多只能有两个子结点。在二叉树中最重要的莫过于遍历。在树的遍历方法中共有先序、中序、后续遍历三种遍历方式,每一种遍历都有递归和循环两种不同的实现方法。同时在树的应用中,又能考察到广度优先搜索、深度优先搜索这两种编程思想,同时二叉搜索树和红黑树、堆都是树的应用。这么说起来觉得树这种结构还是很重要的.

    题目

    输入某二叉树的先序遍历和中序遍历,请重建出该二叉树。

    解题思路及代码

    1. 先求出根节点(前序序列第一个元素)。
    2. 将根节点带入到中序遍历序列中求出左右子树的中序遍历序列。
    3. 通过左右子树的中序序列元素集合位置,带入前序遍历序列可以求出左右子树的前序序列。
    4. 左右子树的前序序列第一个元素分别是根节点的左右儿子
    5. 求出了左右子树的4种序列可以递归上述步骤
    1. /** 
    2. * Definition for binary tree 
    3. * public class TreeNode { 
    4. * int val; 
    5. * TreeNode left; 
    6. * TreeNode right; 
    7. * TreeNode(int x) { val = x; } 
    8. * } 
    9. */ 
    10. public class Solution
    11. public TreeNode reConstructBinaryTree(int [] pre,int [] in)
    12. int len1 = pre.length, len2 = in.length; 
    13.  
    14. if(len1 != len2 || len1 <= 0
    15. return null
    16. TreeNode res = getTreeNode(pre, in, 0, len1-1, 0, len2-1); 
    17. return res; 
    18.  

    19. public TreeNode getTreeNode(int[] pre, int[] in, int preStart, int preEnd, int inStart, int inEnd)
    20. if( preStart > preEnd || inStart > inEnd) 
    21. return null
    22. int val = pre[preStart];//求出根节点 
    23. int pos = -1
    24. for(int i = inStart; i<= inEnd; i++){//在中序遍历中查找根节点 
    25. if(val == in[i]){ 
    26. pos = i; 
    27. break


    28. if(pos == -1
    29. return null
    30. TreeNode node = new TreeNode(val); 
    31. //根据中序遍历的根节点位置,重新计算左右子树的先序和中序遍历的序列,重构二叉树。 
    32. node.left = getTreeNode(pre, in, preStart+1, preStart + pos - inStart, inStart, pos-1); 
    33. node.right = getTreeNode(pre, in, preStart + pos - inStart + 1, preEnd, pos+1, inEnd); 
    34. return node; 


  • 相关阅读:
    在 Queue 中 poll()和 remove()有什么区别?
    jdk 8 HashMap源码解读
    java 中,没有任何方法和成员变量的接口
    ArrayList、LinkedList、Vector、Array
    StringBuilder和StringBuffer
    Collection
    jdk代理和cglib代理源代码之我见
    多 线程
    Spring的@Enable*注解的工作原理
    redis 学习
  • 原文地址:https://www.cnblogs.com/chailinbo/p/8406958.html
Copyright © 2020-2023  润新知