c++刷题(18/100)树
题目1:二叉搜索树的第k个节点
给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
思路:因为是二叉搜索树,所以左中右的顺序遍历,第k个就是第k小的,用引用记录k的变换,k==0时就找到了第k小的节点
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
TreeNode* findK(TreeNode* pRoot,int &k){
TreeNode* ans = NULL ;
if(pRoot->left!=NULL){
ans = findK(pRoot->left,k) ;
}
k-- ;
if(k==&&ans==NULL){
ans = pRoot ;
}
if(ans==NULL&&pRoot->right!=NULL){
ans = findK(pRoot->right,k) ;
}
return ans ;
}
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot == NULL || k == ) return NULL;
return findK(pRoot,k) ;
} };
题目二:对称的二叉树
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
bool isTreeSymmertic(TreeNode* lRoot,TreeNode* rRoot){
if(lRoot==NULL&&rRoot==NULL){
return true ;
}
if(lRoot==NULL) return false ;
if(rRoot==NULL) return false ;
return (lRoot->val==rRoot->val)&&isTreeSymmertic(lRoot->left,rRoot->right)&&isTreeSymmertic(lRoot->right,rRoot->left) ;
}
bool isSymmetrical(TreeNode* pRoot)
{
if(pRoot==NULL){
return true ;
}
return isTreeSymmertic(pRoot->left,pRoot->right) ;
}
};
题目三:二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:主要考中序遍历,中序遍历时左-》中-》右,那么给定一个节点,它可以分成下面几种情况:
1、有右子树,这时只需要把其右孩子作为下一个遍历的(并不是要找的)节点,然后沿着该节点的左子树(如果有的话)出发,直到遇到叶子节点,那么该叶子节点就是其下一个要找的节点;2、没有右子树,则判断该节点是否是其父节点的左孩子,如果是则其下一个要找的节点是其父节点;3、如果不是其父节点的左孩子,则把其父节点作为下一个遍历的节点,向上回溯,直到找到父节点没有父节点并且父节点是父节点的父节点的左孩子为止。综合这三种情况就可以找到二叉树中任意一个节点的下一个节点。
/*
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) { }
};
*/
class Solution {
public:
TreeLinkNode* find(TreeLinkNode* pNode){
if(pNode->left!=NULL){
return find(pNode->left) ;
}else{
return pNode ;
}
}
TreeLinkNode* findFather(TreeLinkNode* pNode){
TreeLinkNode* father ;
if(pNode->next!=NULL){
father = pNode->next ;
}else{
return NULL ;
}
if(father->left==pNode){
return father ;
}else{
return findFather(father) ;
}
}
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode==NULL){
return pNode ;
}
if(pNode->right!=NULL){
return find(pNode->right) ;
}else{
return findFather(pNode) ;
}
}
};
c++刷题(18/100)树的更多相关文章
- LeetCode 刷题笔记 (树)
1. minimum-depth-of-binary-tree 题目描述 Given a binary tree, find its minimum depth.The minimum depth ...
- [刷题] PTA 03-树1 树的同构
程序: 1 #include <stdio.h> 2 #define MaxTree 10 3 #define ElementType char 4 #define Tree int 5 ...
- LeetCode刷题总结-树篇(上)
引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...
- C#LeetCode刷题-树
树篇 # 题名 刷题 通过率 难度 94 二叉树的中序遍历 61.6% 中等 95 不同的二叉搜索树 II 43.4% 中等 96 不同的二叉搜索树 51.6% 中等 98 验证二叉搜索树 ...
- hdu-1540线段树刷题
title: hdu-1540线段树刷题 date: 2018-10-18 19:55:21 tags: acm 刷题 categories: ACM-线段树 概述 哇,,,这道线段树的题可以说是到目 ...
- hdu-5023线段树刷题
title: hdu-5023线段树刷题 date: 2018-10-18 13:32:13 tags: acm 刷题 categories: ACM-线段树 概述 这道题和上次做的那道染色问题一样, ...
- poj-2777线段树刷题
title: poj-2777线段树刷题 date: 2018-10-16 20:01:07 tags: acm 刷题 categories: ACM-线段树 概述 这道题是一道线段树的染色问题,,, ...
- zoj-1610线段树刷题
title: zoj-1610线段树刷题 date: 2018-10-16 16:49:47 tags: acm 刷题 categories: ACM-线段树 概述 这道题是一道简单的线段树区间染色问 ...
- leecode刷题(18)-- 报数
leecode刷题(18)-- 报数 报数 描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 1112 ...
- LeetCode刷题总结-树篇(下)
本文讲解有关树的习题中子树问题和新概念定义问题,也是有关树习题的最后一篇总结.前两篇请参考: LeetCode刷题总结-树篇(上) LeetCode刷题总结-树篇(中) 本文共收录9道题,7道中等题, ...
随机推荐
- SQL DATACOMPARE 实现两个数据库的同步处理.
1. SQL DATACOMPARE 实现 两个数据库的同步 安装破解. 然后进行对比 然后进行 deploy 生成sql 等. 貌似很好用 但是前提是数据库是可用的... 这里面能够看到 生成的脚本 ...
- 函数调用时形参的传递也会被认为是赋值操作(继承自Object后会出现的问题)
http://blog.csdn.net/houqd2012/article/details/25070987
- SQL中MAX()和MIN()函数的使用(比较字符串的大小)
在SQL数据库中,最大/最小值函数—MAX()/MIN()是经常要用到的,下面就将为您分别介绍MAX()函数和MIN()函数的使用,供您参考,希望对您学习SQL数据库能有些帮助. 当需要了解一列中的最 ...
- 半夜思考, 为什么建议重写 equals() 方法时, 也要重写 hashCode() 方法
我说的半夜, 并不是真正的半夜, 指的是在我一个人的时候, 我会去思考一些奇怪的问题. 要理解 hashCode() 需要理解下面三个点: hash契约 哈希冲突 哈希可变 第一点: hash 契约指 ...
- 怎样使用ADO中的UpdateBatch方法(200分)
诸位: 我在使用ADO组件(ADOQuery.ADODataSet)的BatchUpdate模式时,系统竟不认识UpdateBatch.CancelBatch方法.这是怎么回事?我的运行环境是Win2 ...
- mysql测试索引在表中的作用
//未完成 参考书:(完成对缓存中执行计划的查看对比 P133~) Microsoft SQL Server 2008技术内幕:T-SQL查询 实验内容 单表中的索引使用 1.建表 create ta ...
- Repeats SPOJ - REPEATS(重复次数最多的连续重复子串)
论文题例8 https://blog.csdn.net/queuelovestack/article/details/53031731这个解释很好 其实,当枚举的重复子串长度为i时,我们在枚举r[i* ...
- 【About Me】 — 有关于我的 —
HNSDFZ信息组一直非常蒻的一只蒟蒻,正在朝着大佬与正解的方向不懈努力中. 目前还是一只高一的萌新,下个学期进高二就可以升级当学姐啦……٩(๑>◡<๑)۶ 呜呜呜已经高二啦!现在高二了 ...
- PPT高手博客
让PPT设计NEW一NEW——Lonely Fish http://lonelyfish1920.blog.163.com/ http://blog.sina.com.cn/s/blog_698717 ...
- 消除unchecked cast Warning
在Java中,经常会将一个Object类型转成自己想要的Map.List等等.通常的做法是: Object obj = ....; Map<String, String> castMap ...