(剑指offer) 重建二叉树 旋转数组的最小数字

6人阅读 评论(0) 收藏 举报
分类:

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

            

struct TreeNode {
     int val;
     TreeNode *left;
     TreeNode *right;
     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
	TreeNode * function(const vector<int>& pre, int s1, int e1, const vector<int>& vin, int s2, int e2) {
		if (s1 == e1)
			return nullptr;
		TreeNode *root = new TreeNode(pre[s1]);
		int i = s2;
		while (i != e2) {
			if (vin[i++] == pre[s1])
				break;
		}
		root->left = function(pre, s1 + 1, s1 + i - s2, vin, s2, i - 1);
		root->right = function(pre, s1 + i - s2 , e1, vin, i, e2);
		return root;
	}

	TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
		int size1 = pre.size(), size2 = vin.size();
		return function(pre, 0, size1, vin, 0, size2);
	}
};

旋转数组的最小数字

            这一题要注意等于的情况。当因为首位元素可能相等,当中间元素和端点元素相等时我们是判断不了最小数字在mid前段还是mid后段。

class Solution {
public:
	int minNumberInRotateArray(vector<int> rotateArray) {
		if (rotateArray.empty())
			return 0;
		int left = 0, right = rotateArray.size() - 1;
		while (left < right) {
			int mid = left + (right - left) / 2;
			if (rotateArray[mid] > rotateArray[right])
				left = mid + 1;
			else if (rotateArray[mid] < rotateArray[right])
				right = mid;
			else
				++left;
		}
		return rotateArray[left];
	}
};


查看评论

剑指Offer面试题8(java版):旋转数组的最小数字

题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为旋转。 输入一个递增的排序的数组的一个旋转,输出旋转数组的最小元素。  例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转...
  • jsqfengbao
  • jsqfengbao
  • 2015-07-28 17:26:03
  • 2325

剑指offer第六题【旋转数组的最小数字】c++实现

旋转数组的最小数字 参与人数:3258时间限制:1秒空间限制:32768K通过比例:14.10%最佳记录:0 ms|0K(来自  Wocao) 题目描述 把一个数组最开始的若...
  • u011692312
  • u011692312
  • 2015-10-14 11:30:19
  • 497

剑指offer----旋转数组的最小数字----java实现

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该...
  • snow_7
  • snow_7
  • 2016-07-14 15:34:09
  • 2040

旋转数组的最小数字(剑指offer面试题)

此题的结题思路在剑指offer书上分析的也较为透彻,此处的分析过程来自牛客网对本题的讨论中比较好以一个网友的分析过程 旋转之后的数组实际上可以划分成两个有序的子数组:前面子数组的大小都大于后面子...
  • u014221279
  • u014221279
  • 2016-02-23 10:39:58
  • 368

剑指offer-8- Python实现旋转数组的最小数

一、题目描述二、解法def minNumberInRotateArray(rotateArray): # write code here p1 = 0 p2 = len(rot...
  • jackmcgradylee
  • jackmcgradylee
  • 2017-09-06 21:35:31
  • 207

剑指Offer面试题8[旋转数组的最小数字]

剑指Offer面试题8[旋转数组的最小数字]
  • jwb361
  • jwb361
  • 2017-07-19 17:38:17
  • 139

剑指offer:旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个...
  • gao1440156051
  • gao1440156051
  • 2016-06-16 10:57:04
  • 348

leetcode之Search in Rotated Sorted Array,剑指offer之旋转数组的最小数字

输入一个递增数组的旋转,
  • fangjian1204
  • fangjian1204
  • 2014-08-27 15:52:49
  • 1036

剑指offer- 旋转数组的最小元素

一、问题描述 时间限制:1秒空间限制:32768K 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,...
  • u014744118
  • u014744118
  • 2016-10-28 16:23:24
  • 190

查找旋转数组的最小数字 JAVA实现

题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一...
  • u013276277
  • u013276277
  • 2017-05-22 09:20:34
  • 342
    个人资料
    持之以恒
    等级:
    访问量: 306
    积分: 252
    排名: 31万+
    文章存档
    最新评论