1.二叉树的最小深度

给定二叉树,找到它的最小深度。

最小深度是沿从根节点到最近的叶节点的最短路径上的节点数。

注意: 叶子是没有子节点的节点。

例:

给定二叉树[3,9,20,null,null,15,7],
返回其最小深度= 2。

想法:使用bfs直接遍历,找到根和子叶节点最短路径的节点数,且该子节点没有左孩子节点也无右孩子节点

代码:

public int minDepth(TreeNode root) {
        if(root == null) return 0;
        List<TreeNode> list = new LinkedList<>();
        list.add(root);
        int level = 1;
        while(!list.isEmpty()){
            int len = list.size();
            for(int i = 0;i<len;i++){
                TreeNode node = list.remove(0);
                if(node.left == null && node.right == null) return level;
                if(node.left != null) list.add(node.left);
                if(node.right != null) list.add(node.right);
            }
            level++;
        }
        return 0;

2.向树中添加一行:

给定二叉树的根,然后是值v和深度d,您需要v在给定深度添加一行具有值的节点d。根节点位于深度1。

该添加规则是:给定一个正整数的深度d,对于每一个NOT
NULL树节点N的深度d-1,创建两个树节点以价值v为N’s左子树的根和右子树的根。和N’s
原来的左子树应该是新的左子树的根的左子树,其原有的右子树应该是新的右子树的根的右子树。如果depth
d为1表示根本没有深度d-1,则创建一个值为v的树节点作为整个原始树的新根,并且原始树是新根的左子树。
日常算法题(四)

注意: 给定的d在范围[1,给定树的最大深度+ 1]。 给定的二叉树至少有一个树节点。

想法:使用dfs遍历后进行添加
代码:

public class Solution {
    public TreeNode addOneRow(TreeNode root, int v, int d) {
        if(d == 1){
            TreeNode dummy = new TreeNode(v);
            dummy.left = root;
            return dummy;
        }
        helper(root, v, d, 1);
        return root;
    }
    public void helper(TreeNode root,int v, int d, int cur){
        if(root == null) return;
        if(cur == d - 1){
            TreeNode temp = new TreeNode(v);
            temp.left = root.left;
            root.left = temp;
            TreeNode temp2 = new TreeNode(v);
            temp2.right = root.right;
            root.right = temp2;
            return;
        }
        helper(root.left, v, d, cur + 1);
        helper(root.right, v, d, cur + 1);
    }
}

3.在二进制搜索树中搜索:

给定二叉搜索树(BST)的根节点和值。您需要在BST中找到节点的值等于给定值的节点。返回以该节点为根的子树。如果此节点不存在,则应返回NULL。

日常算法题(四)

在上面的例子中,如果我们想要搜索值5,因为没有带有值的节点5,我们应该返回NULL。

请注意,空树表示为NULL,因此您将看到预期的输出(序列化树格式) [],而不是null。

想法:直接递归遍历即可

代码:

   public TreeNode searchBST(TreeNode root, int val) {
        while(root != null) {
            if(root.val == val)
                break;
            else if (root.val > val)
                root = root.left;
            else 
                root = root.right;
        }
        
        return root;
    }

相关文章: