标签:node return val 二叉 初识 搜索 TreeNode root
二叉搜索树
一、翻转二叉树
leetcode 226 题
将二叉树左节点反转到右节点,右节点反转到左节点,递归实现
public TreeNode invertTree(TreeNode root) {
//递归三步走 1.终止条件 2.一次递归需要做什么 3.这次递归要给上级返回什么结果
if(root==null) return null;
TreeNode rightTree=root.right;
root.right=invertTree(root.left);
root.left=invertTree(rightTree);
return root;
}
二、路径总和
leetcode 112题
判断叶子节点是否等于递归后相减的值
class Solution {
boolean res=false;
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root==null) return false;
dfs(root,targetSum);
return res;
}
public void dfs(TreeNode node,int sum){
if(node==null) return ;
if(node.left==null&&node.right==null){
if(sum==node.val){
res=true;
}
}if(!res){
dfs(node.left,sum-node.val);
dfs(node.right,sum-node.val);
}
}
}
三、二叉搜索树
定义:
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根节点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉搜索树;
3.1验证二叉搜索树
leetcode 98题
利用二叉搜索树的特性来验证,左节点的值小于根节点,右节点的值大于根节点,每颗子树都是,
public boolean isValidBST(TreeNode root) {
return inorder(root,Long.MIN_VALUE,Long.MAX_VALUE);
}
public boolean inorder(TreeNode root,long min,long max){
if(root==null) return true;
if(root.val<=min||root.val>=max){
return false;
}
return inorder(root.left,min,root.val)&&inorder(root.right,root.val,max);
}
3.2两数之和
leetcode 653题
利用set 来存储值,找到左子树和右子树之间有没有差值
public boolean findTarget(TreeNode root, int k) {
//利用 hashset 来存储值
HashSet <Integer> set=new HashSet<>();
return findK(root,set,k);
}
public boolean findK(TreeNode node,HashSet <Integer> set,int k){
if(node==null) return false;
if(set.contains(k-node.val)){
return true;
}
set.add(node.val);
return findK(node.left,set,k)||findK(node.right,set,k);
}
3.3二叉搜索树的最近公共祖先
leetcode 235题
利用二叉搜素树的特性来做,左节点小于根节点,右节点大于根节点,所有子树都满足
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
//利用二叉搜索树的特性
if(p.val==root.val){
return p;
}
if(q.val==root.val){
return q;
}
if(p.val>root.val&&q.val>root.val){
return lowestCommonAncestor(root.right,p,q);
}else if(p.val<root.val&&q.val<root.val){
return lowestCommonAncestor(root.left,p,q);
}else{
return root;
}
}
3.4二叉搜索树的第K大节点
leetcode 链接
利用二叉搜索树的特性,中序遍历返回第K大的值
public int kthLargest(TreeNode root, int k) {
List<Integer> list=new ArrayList<>();
dfs(root,k,list);
return list.get(list.size()-k);
}
public void dfs(TreeNode node,int k,List<Integer> list){
if(node==null) return ;
dfs(node.left,k,list);
list.add(node.val);
dfs(node.right,k,list);
}
标签:node,return,val,二叉,初识,搜索,TreeNode,root 来源: https://blog.csdn.net/weixin_51601437/article/details/119355007
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。