层次遍历的题目
填充每个节点的下一个右侧节点指针II(116题)
方法一
主要的思想:利用二叉树转为链表的想法进行。
public Node connect(Node root){
if(root==null) return root;
Queue<Node> queue=new LinkedList<>();
queue.add(root);
while(!queue_isEmpty()){
int levelnum=queue.size();
Node pre=null;
for(int i=0;i<levelnum;i++){
Node node=queue.poll();
if(pre!=null){
pre.next=node;}
pre=node;
if(node.left!=null){
queue.add(node.left);}
if(node.right!=null){
queue.add(node.right);}
}
}
return root;
}
判断二叉树的合法性
boolean isValidBST(TreeNode root) {
return isValidBST(root, null, null);
}
/* 限定以 root 为根的子树节点必须满足 max.val > root.val > min.val */
boolean isValidBST(TreeNode root, TreeNode min, TreeNode max) {
// base case
if (root == null) return true;
// 若 root.val 不符合 max 和 min 的限制,说明不是合法 BST
if (min != null && root.val <= min.val) return false;
if (max != null && root.val >= max.val) return false;
// 限定左子树的最大值是 root.val,右子树的最小值是 root.val
return isValidBST(root.left, min, root)
&& isValidBST(root.right, root, max);
}
1、如果当前节点会对下面的子节点有整体影响,可以通过辅助函数增长参数列表,借助参数传递信息。
2、在二叉树递归框架之上,扩展出一套 BST 代码框架:
void BST(TreeNode root, int target) {
if (root.val == target)
// 找到目标,做点什么
if (root.val < target)
BST(root.right, target);
if (root.val > target)
BST(root.left, target);
}