ps个人网站怎么做,怎样给响应式网站提速,哪个网站可以发宝贝链接做宣传,网站页面结构第21天#xff0c;二叉树最后一篇#xff0c;冲#x1f4aa;
目录
669.修建二叉搜索树
108.将有序数组转换为二叉搜索树
538.把二叉搜索树转换为累加树
二叉树总结 669.修建二叉搜索树 文档讲解#xff1a;代码随想录修建二叉搜索树 视频讲解#xff1a;手撕修建二叉…第21天二叉树最后一篇冲
目录
669.修建二叉搜索树
108.将有序数组转换为二叉搜索树
538.把二叉搜索树转换为累加树
二叉树总结 669.修建二叉搜索树 文档讲解代码随想录修建二叉搜索树 视频讲解手撕修建二叉搜索树 题目 学习
本题需要注意的点很多不能够轻易的就把节点删除首先1.本题给出的最小边界值和最大边界值不一定会存在树中只是提供一个区间大小因此不能够节点判断是否等于low或者high。2.在找到小于low的值后不能够直接将其删除因为它的右孩子不一定小于low同理大于high的节点也不能直接删除还需要关注它的左孩子。3.在2的基础上也不能直接把右孩子返回因为右孩子大于low的情况下右孩子的左孩子还是可能会小于low需要删除因此还需要不断的进行遍历。该情况如下图所示如果区间在[2,3]之间 依据上述所说来设计递归三部曲。
代码
//时间复杂度O(n)
//空间复杂度O(n)
class Solution {
public://确定返回值本题需要重新构造二叉树节点因此使用返回值更加方便当然也可以没有返回值就需要手动进行左右孩子构造TreeNode* trimBST(TreeNode* root, int low, int high) {//确定终止条件if (root nullptr) return nullptr;//确定单层递归逻辑核心是将root转移到low和high区间内//1.当前值大于highif (root-val high) {//在该节点左边找寻是否有合适的值return trimBST(root-left, low, high);}//2.当前值小于lowif (root-val low) {//在该节点右边找寻是否有合适的值return trimBST(root-right, low, high);}//3.当前值在low和high区间内但是还不能就此下定义还需要判断该节点左右孩子是否合格root-left trimBST(root-left, low, high);root-right trimBST(root-right, low, high);//持续把修改后的节点返回上层return root;}
};
代码本题也能够使用迭代法且由于二叉搜索树自带遍历条件因此不需要额外空间。
//时间复杂度O(n)
//空间复杂度O(1)
class Solution {
public:TreeNode* trimBST(TreeNode* root, int L, int R) {if (!root) return nullptr;// 处理头结点让root移动到[L, R] 范围内注意是左闭右闭while (root ! nullptr (root-val L || root-val R)) {if (root-val L) root root-right; // 小于L往右走else root root-left; // 大于R往左走}TreeNode *cur root;// 此时root已经在[L, R] 范围内处理左孩子元素小于L的情况while (cur ! nullptr) {while (cur-left cur-left-val L) {cur-left cur-left-right;}cur cur-left;}cur root;// 此时root已经在[L, R] 范围内处理右孩子大于R的情况while (cur ! nullptr) {while (cur-right cur-right-val R) {cur-right cur-right-left;}cur cur-right;}return root;}
}; 108.将有序数组转换为二叉搜索树 文档讲解代码随想录将有序数组转换为二叉搜索树 视频讲解手撕将有序数组转换为二叉搜索树 题目 学习
注意本题需要构造的不仅是二叉搜索树还需要是一颗平衡二叉树。平衡二叉树需要所有中间节点的左右孩子的高度差不大于1。
依据上述条件又因为本题给的数组已经是一个升序排列的数组了因此本题显然是从中间节点进行构造每次取数组的中间节点即可构造出平衡的二叉搜索树。注意如果数组是奇数显然选中间的节点如果数组是偶数则中间的两个节点选哪个都可以只要统一就行最后构造出的二叉树会有所区别这也是本题答案不唯一的原因。
代码
//时间复杂度O(n)
//空间复杂度O(n^2)
class Solution {
public:TreeNode* sortedArrayToBST(vectorint nums) {//确定终止条件if(nums.size() 0) return nullptr;//取中间值int mid nums.size()/2;TreeNode* node new TreeNode(nums[mid]);//左区间vectorint left(nums.begin(), nums.begin() mid);//右区间vectorint right(nums.begin() mid 1, nums.end());//分配左右子树node-left sortedArrayToBST(left);node-right sortedArrayToBST(right);return node;}
};
代码不使用额外空间下标确定数组区间
//时间复杂度O(n)
//空间复杂度O(n)递归产生的栈空间
class Solution {
public://不使用额外空间下标法TreeNode* traversal(vectorint nums, int left, int right) {//确定终止条件(区间左闭右闭)if(left right) return nullptr;//找到中间值int mid left (right - left)/2; //防止数值越界TreeNode* node new TreeNode(nums[mid]);//左区间node-left traversal(nums, left, mid - 1);//右区间node-right traversal(nums, mid 1, right);return node;}TreeNode* sortedArrayToBST(vectorint nums) {return traversal(nums, 0, nums.size() - 1);}
};
538.把二叉搜索树转换为累加树 文档讲解代码随想录把二叉搜索树转换为累加树 视频讲解手撕把二叉搜索树转换为累加树 题目 学习本题最重要的是需要找到它的规律本题是将每个节点的新值转变为等于原树中大于或等于node.val的值之和。如果将二叉搜索树通过中序遍历转化为数组来看的话其实就是从后往前依次累加。因此本题应该采用的遍历方法是反中序遍历通过右中左的遍历顺序因此将节点值累加。
注意本题累加过程中采用的是双指针的方法需要一个指向当前节点的前一个节点pre来保存上一个节点的累加和。
代码
//时间复杂度O(n)
//空间复杂度O(n)
class Solution {
public:TreeNode* pre nullptr; //指向当前节点的前一个节点//本题不需要返回值只用将当前值改变就行void traversal(TreeNode* root) {//终止条件if(root nullptr) return;//本题的遍历顺序应该为右中左//右traversal(root-right);//中if(pre ! nullptr) {root-val root-val pre-val;}pre root;//左traversal(root-left);}TreeNode* convertBST(TreeNode* root) {traversal(root);return root;}
};
代码本题也能够使用迭代法进行
//时间复杂度O(n)
//空间复杂度O(n)
class Solution {
private:int pre; // 记录前一个节点的数值void traversal(TreeNode* root) {stackTreeNode* st;TreeNode* cur root;while (cur ! NULL || !st.empty()) {if (cur ! NULL) {st.push(cur);cur cur-right; // 右} else {cur st.top(); // 中st.pop();cur-val pre;pre cur-val;cur cur-left; // 左}}}
public:TreeNode* convertBST(TreeNode* root) {pre 0;traversal(root);return root;}
};
二叉树总结
对于二叉树来说我们首先需要掌握的就是递归这一算法确定递归三部曲掌握通过递归进行的二叉树的前序遍历、中序遍历、后序遍历的方法。
其次对于二叉树来说它的迭代方法同样也很重要递归由于其不断递归的特殊性稍有不慎就容易导致栈溢出且问题相对于迭代法不好排查。因此掌握迭代法对于实际工程使用也十分重要。
这七天我们对二叉树的遍历方式各种属性二叉树的修改和构造都进行了详细的练习。并且对二叉树中一个重要的类型二叉搜索树也进行了详细的考察二叉搜索树自带的遍历顺序能够便于解答很多问题同时对二叉搜索树进行中序遍历能够得到一个非递减序列也是重要的性质之一。
总结来说 涉及到二叉树的构造无论普通二叉树还是二叉搜索树一定都是先构造中节点。 求普通二叉树的属性一般是后序一般要通过递归函数的返回值做计算。包括是否对称求最大深度最小深度有多少个节点是否平衡路径问题左叶子之和、左下角的值等 求二叉搜索树的属性一定是中序了要不白瞎了有序性了。 二叉树系列就这么完美结束了 文章转载自: http://www.morning.fjscr.cn.gov.cn.fjscr.cn http://www.morning.mfjfh.cn.gov.cn.mfjfh.cn http://www.morning.sflnx.cn.gov.cn.sflnx.cn http://www.morning.qmwzr.cn.gov.cn.qmwzr.cn http://www.morning.xprq.cn.gov.cn.xprq.cn http://www.morning.lpcpb.cn.gov.cn.lpcpb.cn http://www.morning.csgwd.cn.gov.cn.csgwd.cn http://www.morning.qmbtn.cn.gov.cn.qmbtn.cn http://www.morning.ffmx.cn.gov.cn.ffmx.cn http://www.morning.rbnp.cn.gov.cn.rbnp.cn http://www.morning.rjkfj.cn.gov.cn.rjkfj.cn http://www.morning.zdkzj.cn.gov.cn.zdkzj.cn http://www.morning.bztzm.cn.gov.cn.bztzm.cn http://www.morning.tndxg.cn.gov.cn.tndxg.cn http://www.morning.pwlxy.cn.gov.cn.pwlxy.cn http://www.morning.wsyq.cn.gov.cn.wsyq.cn http://www.morning.ygwyt.cn.gov.cn.ygwyt.cn http://www.morning.kfhm.cn.gov.cn.kfhm.cn http://www.morning.dtnjr.cn.gov.cn.dtnjr.cn http://www.morning.llxyf.cn.gov.cn.llxyf.cn http://www.morning.gtqws.cn.gov.cn.gtqws.cn http://www.morning.tnmmp.cn.gov.cn.tnmmp.cn http://www.morning.wztnh.cn.gov.cn.wztnh.cn http://www.morning.hrhwn.cn.gov.cn.hrhwn.cn http://www.morning.mfzyn.cn.gov.cn.mfzyn.cn http://www.morning.lysrt.cn.gov.cn.lysrt.cn http://www.morning.nndbz.cn.gov.cn.nndbz.cn http://www.morning.nwwzc.cn.gov.cn.nwwzc.cn http://www.morning.dkqbc.cn.gov.cn.dkqbc.cn http://www.morning.rgsnk.cn.gov.cn.rgsnk.cn http://www.morning.qmqgx.cn.gov.cn.qmqgx.cn http://www.morning.ttaes.cn.gov.cn.ttaes.cn http://www.morning.dkbgg.cn.gov.cn.dkbgg.cn http://www.morning.pjtnk.cn.gov.cn.pjtnk.cn http://www.morning.nqgff.cn.gov.cn.nqgff.cn http://www.morning.rkdw.cn.gov.cn.rkdw.cn http://www.morning.hcwlq.cn.gov.cn.hcwlq.cn http://www.morning.fwqgy.cn.gov.cn.fwqgy.cn http://www.morning.ttxnj.cn.gov.cn.ttxnj.cn http://www.morning.ywrt.cn.gov.cn.ywrt.cn http://www.morning.xjbtb.cn.gov.cn.xjbtb.cn http://www.morning.pffx.cn.gov.cn.pffx.cn http://www.morning.dbfp.cn.gov.cn.dbfp.cn http://www.morning.ssmhn.cn.gov.cn.ssmhn.cn http://www.morning.rsdm.cn.gov.cn.rsdm.cn http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn http://www.morning.trqzk.cn.gov.cn.trqzk.cn http://www.morning.rxnxl.cn.gov.cn.rxnxl.cn http://www.morning.mttqp.cn.gov.cn.mttqp.cn http://www.morning.hlfgm.cn.gov.cn.hlfgm.cn http://www.morning.c7510.cn.gov.cn.c7510.cn http://www.morning.rwmq.cn.gov.cn.rwmq.cn http://www.morning.xbptx.cn.gov.cn.xbptx.cn http://www.morning.xnzmc.cn.gov.cn.xnzmc.cn http://www.morning.ljbpk.cn.gov.cn.ljbpk.cn http://www.morning.prgyd.cn.gov.cn.prgyd.cn http://www.morning.lbqt.cn.gov.cn.lbqt.cn http://www.morning.mdtfh.cn.gov.cn.mdtfh.cn http://www.morning.rntyn.cn.gov.cn.rntyn.cn http://www.morning.4q9h.cn.gov.cn.4q9h.cn http://www.morning.sxwfx.cn.gov.cn.sxwfx.cn http://www.morning.zlzpz.cn.gov.cn.zlzpz.cn http://www.morning.lpnb.cn.gov.cn.lpnb.cn http://www.morning.zqfz.cn.gov.cn.zqfz.cn http://www.morning.bylzr.cn.gov.cn.bylzr.cn http://www.morning.ohmyjiu.com.gov.cn.ohmyjiu.com http://www.morning.ljpqy.cn.gov.cn.ljpqy.cn http://www.morning.wcczg.cn.gov.cn.wcczg.cn http://www.morning.rmdsd.cn.gov.cn.rmdsd.cn http://www.morning.syhwc.cn.gov.cn.syhwc.cn http://www.morning.hqlnp.cn.gov.cn.hqlnp.cn http://www.morning.rcdmp.cn.gov.cn.rcdmp.cn http://www.morning.rhwty.cn.gov.cn.rhwty.cn http://www.morning.tbrnl.cn.gov.cn.tbrnl.cn http://www.morning.24vy.com.gov.cn.24vy.com http://www.morning.lsyk.cn.gov.cn.lsyk.cn http://www.morning.dxhnm.cn.gov.cn.dxhnm.cn http://www.morning.dbqcw.com.gov.cn.dbqcw.com http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn http://www.morning.rqsnl.cn.gov.cn.rqsnl.cn