剑指 Offer 54. 二叉搜索树的第k大节点
题目
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int res,k;
public int kthLargest(TreeNode root, int k) {
this.k=k;
recur(root);
return res;
}
void recur(TreeNode root){
//使用全局变量k计数,当遍历到第k大个节点时,存储到res中返回
//递归返回条件:root为空时,遍历到叶子节点,返回空值,对于k小于等于0的情况直接返回,节省时间
if ((root==null)||(k==0)) return;
recur(root.right);
if(--k==0){
res=root.val;
}
recur(root.left);
}
}
剑指 Offer 55 - I. 二叉树的深度
题目
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root==null) return 0;
return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
}
}
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if not root:return 0
return max(self.maxDepth(root.left),self.maxDepth(root.right))+1
剑指 Offer 55 - II. 平衡二叉树
题目
思路
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
return recur(root)!=-1;
}
// 递归函数判断以root节点为根的子树是否为平衡二叉树
int recur(TreeNode root){
// 对于叶子节点,返回层数为0
if(root==null) return 0;
// 递归root节点左子树的层数
int left=recur(root.left);
// 如果left为-1,代表左子树不是平衡二叉树,可以直接返回-1,剪枝操作节省时间
if(left==-1) return -1;
// 递归root节点右子树层数
int right=recur(root.right);
// 如果right为-1,代表👉子树不是平衡二叉树,可以直接返回-1,剪枝操作节省时间
if(right==-1) return -1;
// 查询本root节点的左右子树层数相差是否大于2,若是则不是平衡二叉树返回-1.
return Math.abs((left-right))<2 ? Math.max(left,right)+1:-1;
}
}
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
def recur(root):
if not root : return 0
left=recur(root.left)
if left==-1:return -1
right=recur(root.right)
if right==-1:return -1
if abs(left-right)<2:
return max(left,right)+1
else:
return -1
return recur(root)!=-1