当前位置: 首页 > 面试题库 >

算法题,给前序和中序,求出二叉树

华凯捷
2023-03-14
本文向大家介绍算法题,给前序和中序,求出二叉树相关面试题,主要包含被问及算法题,给前序和中序,求出二叉树时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

class TreeNode {
	int val;
	TreeNode left;
	TreeNode right;
    TreeNode(int x) {
 	   val = x;
    }
}
public class TestRecoverBinaryTree {
    public TreeNode reConstructBinaryTree(int [] preOrder,int [] inOrder)
    {
        int pLen = preOrder.length;
        int iLen = inOrder.length;
        if(pLen==0 && iLen==0)
        {
            return null;
        }
        return  btConstruct( preOrder, inOrder, 0, pLen-1,0, iLen-1);
    }
	//构建方法,pStart和pEnd分别是前序遍历序列数组的第一个元素和最后一个元素;
	//iStart和iEnd分别是中序遍历序列数组的第一个元素和最后一个元素。
    public TreeNode btConstruct(int[] preOrder, int[] inOrder, int pStart, int pEnd,int iStart,int iEnd)
    {
        //建立根节点
        TreeNode tree = new TreeNode(preOrder[pStart]);
        tree.left = null;
        tree.right = null;
        if(pStart == pEnd && iStart == iEnd)
        {
        return tree;
        }
        int root = 0;
        //找中序遍历中的根节点

        for(root=iStart; root<iEnd; root++)
        {
        if(preOrder[pStart] == inOrder[root])
        {
        break;
        }
        }
        //划分左右子树

        int leftLength = root - iStart;//左子树
        int rightLength = iEnd - root;//右子树

        //遍历左子树
        if(leftLength>0)
        {
            tree.left = btConstruct(preOrder, inOrder,  pStart+1,  pStart+leftLength, iStart, root-1);
        }
        //遍历右子树
        if(rightLength>0)
        {
            tree.right = btConstruct(preOrder, inOrder,  pStart+leftLength+1,  pEnd, root+1, iEnd);
        }
        return tree;
    }
}

 

 类似资料:
  • 本文向大家介绍算法题:根据前序,中序创建二叉树。相关面试题,主要包含被问及算法题:根据前序,中序创建二叉树。时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 解析:剑指OFFER原题:构建二叉树。通过前序第一个节点(根节点)分割后序遍历的字符串。分别递归的根节点的左右节点。

  • 谷歌要求设计一个算法来序列化和反序列化二叉树。我在网上找到了一个解决方案。我不太理解的部分是为什么在第20行需要这个条件,其中“if node==None:”,self。根=节点(值)?因为毕竟,该程序将提示用户以例如:1,3,5的形式输入节点,以便程序工作,因此不会出现节点=无的情况,因为用户输入是必要的?我是不是误解了什么?

  • 本文向大家介绍手写代码:通过前序和中序还原二叉树相关面试题,主要包含被问及手写代码:通过前序和中序还原二叉树时的应答技巧和注意事项,需要的朋友参考一下 参考回答: //算法1  

  • 本文向大家介绍JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】,包括了JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript数据结构与算法之二叉树遍历算法。分享给大家供大家参考,具体如下: javascript数据结构与算法--二叉树遍历(先序) 先序遍历先访问根节点, 然后以

  • 我试图理解二叉树遍历(PreOrder)的实现。非递归方法很好,但我在试图理解递归方法时完全迷失了方向。 代码: 二叉树 我的理解是,当到达节点2(8-4-2)时,节点2的左边没有。所以条件将失败。 下面是我的问题。 点头之后。左无,右无。右边是横穿的?(因为如果启动:条件失败) 在节点1之后,逻辑如何移动到节点5哪个根节点。对吧? 我对递归的理解很差,请帮助!