剑指offer
西二旗的小飞飞
还没去西二旗。。。
展开
-
面试题27:二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 解: 见代码注释/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) :原创 2017-04-28 21:46:45 · 212 阅读 · 0 评论 -
【剑指offer】最小的K个数
题目描述 输入N个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 解:使用堆这一数据结构,时间复杂度为O(NlgK)class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {原创 2017-07-24 22:37:38 · 261 阅读 · 0 评论 -
面试题61:按之字形顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 解: 两个栈/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x)原创 2017-04-28 22:52:33 · 273 阅读 · 0 评论 -
面试题60:把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 解: 队列实现/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right原创 2017-04-28 22:51:30 · 279 阅读 · 0 评论 -
面试题59:对称的二叉树
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 解: 递归/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(原创 2017-04-28 22:50:09 · 277 阅读 · 0 评论 -
面试题58:二叉树中的下一个结点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解:/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkN原创 2017-04-28 22:48:53 · 349 阅读 · 0 评论 -
面试题39_2:平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 解:class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot == NULL) return true; if(abs(heightOfTree(pRoot->left)原创 2017-04-28 22:45:31 · 287 阅读 · 0 评论 -
面试题39:二叉树的深度
题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 解: 递归/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) :原创 2017-04-28 22:40:58 · 196 阅读 · 0 评论 -
面试题25:二叉树中和为某一值的路径
题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 解: 带记忆的DFS/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x原创 2017-04-28 22:38:07 · 286 阅读 · 0 评论 -
面试题24:二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 解: 二叉搜索树有序+ 后序遍历特点class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { // 假定空序列结果为fals原创 2017-04-28 22:35:02 · 267 阅读 · 0 评论 -
面试题18:树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解: 见注释/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/原创 2017-04-28 22:23:36 · 215 阅读 · 0 评论 -
面试题19:二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8原创 2017-04-28 22:25:41 · 310 阅读 · 0 评论 -
面试题23:从上往下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解: 层次遍历/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {原创 2017-04-28 22:27:45 · 284 阅读 · 0 评论 -
面试题63:二叉搜索树的第k个结点
题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。解: 二叉搜索树的一个重要性质就是它的中序遍历是排序的,因此这道题目只需要用中序遍历一棵二叉搜索树,找到第K个遍历的结点输出即可。可用递归或者迭代解决此题。/*struct TreeNode { int val; stru原创 2017-04-27 00:15:45 · 282 阅读 · 0 评论 -
面试题6:重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 解: 递归/*** Definition for binary tree* struct TreeNode {* int val;原创 2017-04-28 22:20:51 · 502 阅读 · 0 评论