在二叉树中增加一行[前序遍历与dfs]

前言

对于树/图问题,遍历是基础,每种操作都是在遍历过程中完成的。而不同的遍历过程可解决不同的问题。主要是前序&dfs,中序&平衡二叉,后序&回溯,层序&bfs。

一、在二叉树中增加一行

在这里插入图片描述

二、前序&dfs

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode addOneRow(TreeNode root, int val, int depth) {
        // 特殊情况,需要换根。
        if(depth == 1) return new TreeNode(val,root,null);
        // 其它情况,在二叉树遍历的基础上更新树即可。
        order(root,val,depth,1);
        // 返回根节点。
        return root;
    }
    // 在前序遍历的基础上,加入新节点即可。
    public void order(TreeNode root,int val, int depth,int cur){
        // 碰到null节点,结束递归。
        if(root == null) return;
        // 前序遍历,到达指定深度,开始新增left/right节点。
        if(cur + 1 == depth){
            // 申请新节点。
            TreeNode leftNode = new TreeNode(val),rightNode = new TreeNode(val);
            // 加入新的左右节点。
            leftNode.left = root.left;
            root.left = leftNode;

            rightNode.right = root.right;
            root.right = rightNode;

            return;
        }
        // 正常的递归方位左右节点。
        order(root.left,val,depth,cur + 1);
        order(root.right,val,depth,cur + 1);
    }
}

总结

1)二叉树问题,都是在遍历的基础上进行改进,有4种遍历方式,分别为前序&dfs,中序&平衡二叉,后序&回溯,层序&bfs。

参考文献

[1] LeetCode 在二叉树中增加一行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值