剑指Offer C++ --- 树
创始人
2025-06-01 08:13:04
0

1.BST树区间元素搜索问题

//寻找元素值在区间[i,j]的元素
//对于BST树而言,中序遍历由小到大排列
void findvalues(Node* root,vector&vec,int i,intj)
{if(root != nullptr){if(root->data > i){ findvalues(root->left,vec,i,j);}if(root->data >= i  && root->data <= j){vec.push_back(root->data);}if(root->data < j){findvalues(root->right,vec,i,j);}}
}

2. 判断一颗二叉树是不是BST树

思路:利用BST树中序遍历是一个升序的特点

bool isBSTree(Node* root,Node*& pre)
{if(node == nullptr){return true;}  //左子树if(!isBSTree(root->left,pre)){return false;}if(pre != nullptr && root->data < pre->data)        {return false;}pre = root;//右子树return isBSTree(root->right,pre);
}

3.判断BST树子树问题

bool isChildTree(Node* childroot)
{if(childroot == nullptr){return false;}Node* cur = childroot;while(cur!=nullptr){if(cur->data == childroot->data){break;}else if(cur->data < childroot->data){cur = cur->right;}else{cur = cur->left;}}if(cur != nullptr){return isChildTree(cur,childroot); }return false;
}bool isChildTress(Node* parent,Node* childroot)
{if(child == nullptr){return true;}if(parent == nullptr || parent->data != childroot->data ){return false;}return isChildTree(parent->left,childroot->left) && isChildTree(parent->right,childroot->right);
}

4.BST树最近公共祖先

TreeNode* lowestCommonAncestor(TreeNode* root,TreeNode* p,TreeNode* q)
{if(root == nullptr){return nullptr;}if(root->data < p->data && root->data < q->data){return lowestCommonAncestor(root->right,p,q);}else if(root->data > p->data && root->data > q->data){return lowestCommonAncestor(root->left,p,q);}else{return root;}return nullptr;
}

5.二叉树镜像对称问题

TreeNode* mirrorTree(TreeNode* root)
{if(root == nullptr){return nullptr;}TreeNode* tmp = root->left;root->left = root->right;root->right = tmp;mirrorTree(root->left);mirrorTree(root->right);return root;
}

6.对称的二叉树

bool isSymmetric(TreeNode* root) 
{if(root == nullptr){return true;}return isSymmetric(root->left,root->right);
}bool isSymmetric(TreeNode* node1,TreeNode* node2)
{if(node1 == nullptr && node2 == nulpptr){return true;}if(node1 == nullptr || node2 == nullptr){return false;}if(node1->val != node2->val){return false; }return isSymmeric(node1->left,node2->right) && isSymmeric(node1->right,node2->left);
}

7.根据前序遍历和后续遍历的序列重建二叉树

TreeNode* bulidTree(vector &perorder,vector &inorder)
{return rebulid(peroder,0,peroder.size()-1,inorder,0,inorder.size()-1);   
}TreeNode* rebuild(vector& perorder,int i,int j,vector& inorder,int m,int n)
{if(i>j || m>n){return nullptr;} //创建根节点,先序遍历的第一个结点就是根结点TreeNode* node = new TreNode(perorder[i]);for(int k = m;k<=n;++k){if(inorder[k] == perorder[i]){  //左子树node->left = rebulid(perorder,i+1,i+k-m,inorder,m,k-1);//右子树node->right = rebulid(perorder,i+k-m+1,j,inorder,k+1,n);return node;}}return node;
}

8.判断二叉树是不是平衡树

bool balance(TreeNode* root)
{if(root == nullptr){return true;}int h = 0;bool flag = true;balance(root,h,true);return flag;
}int balance(TreeNode* node,int h,bool & flag)
{if(node == nullptr){return h;}//左子树int left = balance(node->left,h+1,flag);if(!flag){return 0;}//右子树int right = balance(node->right,h+1,flag);if(!flag){return 0; }     if(abs(left-right) > 1)  //高度差大于1,失衡{flag = false;}return max(left,right);
}

9.BST树的第K大结点

中序遍历由小大排列,LVR

RVL,第K个元素就是第K大结点

int i = 0;
int KthLargest(TreeNode* root,int k)
{return getVal(root,k)->val;
}TreeNode* getVal(TreeNode* node,int k)
{if(node == nullptr){return nullptr;}//RTreeNode* right = getVal(node->right,k);if(right != nullptr){return right; }if(++i == k)     //V{return node;}//Lreturn getVal(node->left,k);
}

相关内容

热门资讯

安卓子系统windows11,... 你知道吗?最近科技圈可是炸开了锅,因为安卓子系统在Windows 11上的兼容性成了大家热议的话题。...
电脑里怎么下载安卓系统,电脑端... 你有没有想过,你的电脑里也能装上安卓系统呢?没错,就是那个让你手机不离手的安卓!今天,就让我来带你一...
索尼相机魔改安卓系统,魔改系统... 你知道吗?最近在摄影圈里掀起了一股热潮,那就是索尼相机魔改安卓系统。这可不是一般的改装,而是让这些专...
安卓系统哪家的最流畅,安卓系统... 你有没有想过,为什么你的手机有时候像蜗牛一样慢吞吞的,而别人的手机却能像风一样快?这背后,其实就是安...
安卓最新系统4.42,深度解析... 你有没有发现,你的安卓手机最近是不是有点儿不一样了?没错,就是那个一直在默默更新的安卓最新系统4.4...
android和安卓什么系统最... 你有没有想过,你的安卓手机到底是用的是什么系统呢?是不是有时候觉得手机卡顿,运行缓慢,其实跟这个系统...
平板装安卓xp系统好,探索复古... 你有没有想过,把安卓系统装到平板上,再配上XP系统,这会是怎样一番景象呢?想象一边享受着安卓的便捷,...
投影仪装安卓系统,开启智能投影... 你有没有想过,家里的老式投影仪也能焕发第二春呢?没错,就是那个曾经陪你熬夜看电影的“老伙计”,现在它...
安卓系统无线车载carplay... 你有没有想过,开车的时候也能享受到苹果设备的便利呢?没错,就是那个让你在日常生活中离不开的iOS系统...
谷歌安卓8系统包,系统包解析与... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,最近谷歌又发布了安卓8系统包,听说这个新...
微软平板下软件安卓系统,开启全... 你有没有想过,在微软平板上也能畅享安卓系统的乐趣呢?没错,这就是今天我要跟你分享的神奇故事。想象你手...
coloros是基于安卓系统吗... 你有没有想过,手机里的那个色彩斑斓的界面,背后其实有着一个有趣的故事呢?没错,我要说的就是Color...
安卓神盾系统应用市场,一站式智... 你有没有发现,手机里的安卓神盾系统应用市场最近可是火得一塌糊涂啊!这不,我就来给你好好扒一扒,看看这...
黑莓平板安卓系统升级,解锁无限... 亲爱的读者们,你是否还记得那个曾经风靡一时的黑莓手机?那个标志性的全键盘,那个独特的黑莓体验,如今它...
安卓文件系统采用华为,探索高效... 你知道吗?最近安卓系统在文件管理上可是有了大动作呢!华为这个科技巨头,竟然悄悄地给安卓文件系统来了个...
深度系统能用安卓app,探索智... 你知道吗?现在科技的发展真是让人惊叹不已!今天,我要给你揭秘一个超级酷炫的话题——深度系统能用安卓a...
安卓系统的分区类型,深度解析存... 你有没有发现,你的安卓手机里藏着不少秘密?没错,就是那些神秘的分区类型。今天,就让我带你一探究竟,揭...
安卓系统铠无法兑换,揭秘无法兑... 最近是不是有很多小伙伴在玩安卓系统的游戏,突然发现了一个让人头疼的问题——铠无法兑换!别急,今天就来...
汽车安卓系统崩溃怎么刷,一键刷... 亲爱的车主朋友们,你是否曾遇到过汽车安卓系统崩溃的尴尬时刻?手机系统崩溃还能重启,但汽车系统崩溃了,...
miui系统可以刷安卓p系统吗... 亲爱的手机控们,你是否对MIUI系统情有独钟,同时又对安卓P系统的新鲜功能垂涎欲滴?今天,就让我带你...