手撕LeetCode-二叉树的层次遍历方法

层次遍历的题目

  • 填充每个节点的下一个右侧节点指针II(116题)
    • 方法一

填充每个节点的下一个右侧节点指针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);
}

你可能感兴趣的:(手撕LeetCode-二叉树的层次遍历方法)