LeetCode 105
来源:互联网 发布:上古时代网络用语 编辑:程序博客网 时间:2024/05/01 00:52
原题:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
题意:给你一个前序遍历和中序遍历的数组,要求构建二叉树
代码和思路:
前序遍历:就是先访问 根节点------左子树------右子树 所以前序遍历数组的第一个数就是根节点。
中序遍历:就是先访问 左子树------根节点------右子树 根节点在中间,左边是左子树,右边是右子树
4 / \ 2 7 / \ / \1 3 6 9上面的二叉树为例子:
前序遍历的结果是:4213769
中序遍历的结果是:1234679 可以看到4在最中间,2在13中间,7在69中间。这样就用迭代即可
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { return recursion(0,0,inorder.length-1,preorder,inorder); } private TreeNode recursion(int preStart,int inStart,int inEnd,int[] preorder, int[] inorder){ if(preStart > preorder.length-1 || inStart > inEnd){ return null; } //根据前序遍历找出根节点 TreeNode root = new TreeNode(preorder[preStart]); int inIndex = 0; //找出根节点在中序遍历中的位置,用inIndex记录 for(int i = inStart;i<=inEnd;i++){ if(inorder[i]==root.val){ inIndex = i; } } //左树是中序数组的 开头(inStart) 到 根节点(inIdex-1) root.left = recursion(preStart+1,inStart,inIndex-1,preorder,inorder); //右树是中序数组的 根节点(inIdex+1)到 结尾(inEnd) root.right = recursion(preStart+inIndex-inStart+1,inIndex+1,inEnd,preorder,inorder); return root; }}
阅读全文
0 0
- Leetcode 105
- LeetCode #105
- LeetCode 105
- LeetCode 105 Rotate Image
- [LeetCode] 105 & 106
- leetcode #105 in cpp
- Leetcode no. 105
- leetCode练习(105)
- leetcode 105&106
- leetcode 105 & 106
- [Leetcode] 105, 106, 96
- Leetcode 105&106
- [LeetCode] 105: Spiral Matrix
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- CSAPP LAB2 BombLab
- 移动站如何进行seo优化?
- 安卓Studio 依赖、权限
- linux屏幕键盘
- mybatis设置全局变量
- LeetCode 105
- 如何实现在 Android Studio 上开发系统应用(自带系统签名)
- 安装gensim的过程中遇到的坑
- 介绍ImageLoader框架的使用以及核心代码
- 【笔记】队列及其应用
- AI后时代编程是否也会被取代?
- 简单购物车
- cuDNN
- Linux单元小结(7)