首页 > 编程语言 > 代码随想录算法训练营第二十天|654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树

代码随想录算法训练营第二十天|654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树

时间:2023-05-29 13:22:32浏览次数:50  
标签:right return val self 二叉 搜索 二叉树 root left

【参考链接】

654. 最大二叉树

【注意】

1.构造二叉树,都需要用前序遍历。

2.二叉树的根是数组中的最大元素。

3.没必要构造新数组,通过下标控制左右区间。运行效率会高很多。

【代码】

 1 # Definition for a binary tree node.
 2 # class TreeNode(object):
 3 #     def __init__(self, val=0, left=None, right=None):
 4 #         self.val = val
 5 #         self.left = left
 6 #         self.right = right
 7 class Solution(object):
 8     def constructMaximumBinaryTree(self, nums):
 9         """
10         :type nums: List[int]
11         :rtype: TreeNode
12         """
13         if not nums:
14             return None
15         #中
16         maxvalue = max(nums)
17         index = nums.index(maxvalue)
18 
19         root = TreeNode(maxvalue)
20         left = nums[:index]#左闭右开
21         right = nums[index+1:]
22 
23         #左
24         root.left = self.constructMaximumBinaryTree(left)
25         #右
26         root.right = self.constructMaximumBinaryTree(right)
27         return root

617. 合并二叉树

【注意】

1.合并必须从两个树的根节点开始。

2.前序遍历 。其实和遍历一个树逻辑是一样的,只不过传入两个树的节点,同时操作。

【代码】

 1 # Definition for a binary tree node.
 2 # class TreeNode(object):
 3 #     def __init__(self, val=0, left=None, right=None):
 4 #         self.val = val
 5 #         self.left = left
 6 #         self.right = right
 7 class Solution(object):
 8     def mergeTrees(self, root1, root2):
 9         """
10         :type root1: TreeNode
11         :type root2: TreeNode
12         :rtype: TreeNode
13         """
14         # 递归终止条件: 
15         #  但凡有一个节点为空, 就立刻返回另外一个. 如果另外一个也为None就直接返回None. 
16         if not root1:
17             return root2
18         if not root2:
19             return root1
20         
21         # 上面的递归终止条件保证了代码执行到这里root1, root2都非空. 
22         root1.val += root2.val
23         root1.left = self.mergeTrees(root1.left,root2.left)
24         root1.right = self.mergeTrees(root1.right,root2.right)
25 
26         return root1

700. 二叉搜索树中的搜索

【注意】

1.二叉搜索树是一个有序树:

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉搜索树

【代码】

# 为什么要有返回值: 
#   因为搜索到目标节点就要立即return,
#   这样才是找到节点就返回(搜索某一条边),如果不加return,就是遍历整棵树了。
 1 # Definition for a binary tree node.
 2 # class TreeNode(object):
 3 #     def __init__(self, val=0, left=None, right=None):
 4 #         self.val = val
 5 #         self.left = left
 6 #         self.right = right
 7 class Solution(object):
 8     def searchBST(self, root, val):
 9         """
10         :type root: TreeNode
11         :type val: int
12         :rtype: TreeNode
13         """
14         #递归法
15         if not root or root.val == val:
16             return root
17         
18         if root.val > val:
19             return self.searchBST(root.left, val)
20         
21         if root.val < val:
22             return self.searchBST(root.right, val)
23         
24         #迭代法-利用二叉搜索树的特性
25         while root is not None:
26             if val < root.val: root = root.left
27             elif val > root.val: root = root.right
28             else: return root
29         return None

98. 验证二叉搜索树

【注意】

1.按左中右顺序遍历,就是有序数组---是否是单调递增的。--中序遍历。

【代码】

 

标签:right,return,val,self,二叉,搜索,二叉树,root,left
From: https://www.cnblogs.com/wuyijia/p/17439880.html

相关文章

  • 对输入法或搜索类软件产品的评价
    微软拼音输入法1.从用户的角度考虑输入法是电脑自带的微软输入法,使用起来非常简洁,而且使用起来非常方便,无需另外下载输入法。2.记住用户的选择对于输入拼音的词语匹配很好,对于一些大家都常用的词汇都放在前面。不过有的时候自己最近输入的一些词汇并没有放在最前面,而是比较靠......
  • 第K短路(A*算法 启发式搜索算法)
    【启发式算法】定义函数h[x]=g[x]+f[x];其中g[x]是x结点的真实值,f[x]是x结点的估计剩余代价值,h[x]就是当前方案的总估计值。在BFS过程中,以最优价值优先遍历,可以减小时间复杂度,并简化问题。A*算法的优势就是,对当前结点做一个价值估计,取出堆中最优的结点进行下一次遍历。在求......
  • #yyds干货盘点# LeetCode程序员面试金典:二叉搜索树迭代器
    1.简述:实现一个二叉搜索树迭代器类BSTIterator,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNoderoot)初始化BSTIterator类的一个对象。BST的根节点root会作为构造函数的一部分给出。指针应初始化为一个不存在于BST中的数字,且该数字小于BST中的任何元素。b......
  • Qt编写视频监控系统76-Onvif跨网段组播搜索和单播搜索的实现
    一、前言在视频监控行业一般会用国际onvif工具来测试设备是否支持onvif协议,工具的名字叫ONVIFDeviceManager(还有个工具叫ONVIFDeviceTestTool,专用于程序员测试各种数据交互),可以自行搜索下载,此工具位国际官方工具,如果此工具搜索不到摄像机,则说明该摄像机不是真正的onvif摄像......
  • 电商搜索的多路召回
    当选用elasticsearch作为电商的商品搜索存储系统时,用户输入一个query时,这个query是如何从es中查询出商品数据的?首先,用户输入的query词会通过query分析服务产出若干个从不同维度表达用户意图的tokens。比如输入“红富士苹果”,经query分析后会产出以下维度的tokens:......
  • leetcode: 对称二叉树
    题目描述给你一个二叉树的根节点 root ,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false提示:树中节点数目在范围 [1,1000] 内-100<=Node.val<=100题目地址:对称二叉树思路遍历每一个节......
  • 代码随想录算法训练营第十七天|110. 平衡二叉树、257. 二叉树的所有路径
    【参考链接】110.平衡二叉树【注意】1.一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。2.求高度一定要用后序遍历。【代码】1#Definitionforabinarytreenode.2#classTreeNode(object):3#def__init__(self,va......
  • 5_26打卡_二叉树的创建与遍历(递归)
    #include<iostream>usingnamespacestd;typedefstructtree{ chardata; tree*lchild; tree*rchild;}tree;//递归实现创建树voidcreatTree(tree*&root){ charch; cin>>ch; if(ch=='0') { root=NULL; } else{ root=......
  • 链式二叉树的实现(c实现)
    本篇博客主要写了如何完成二叉树的前,中,后序遍历,查找特定值的节点,计算最大深度等。都是对二叉树的一些基本操作。二叉树基本操作头文件typedefcharBTDataType;typedefstructBinaryTreeNode{ BTDataTypedata; structBinaryTreeNode*left; structBinaryTreeNode*right;......
  • 移除Launcher界面搜索栏
    移除Launcher界面搜索栏-publicstaticfinalbooleanQSB_ON_FIRST_SCREEN=true;+publicstaticfinalbooleanQSB_ON_FIRST_SCREEN=false;//removeQSBinLauncher3byoyon2023/05/27......