Leetcode17.12 BiNode 中序遍历

  需要注意边界条件以及 环 的处理。

  JAVA 中序遍历:

复制代码
public final TreeNode convertBiNode(TreeNode root) {
        return dfs2(root);
    }

    public final TreeNode dfs2(TreeNode node) {
        if (node == null) return node;
        TreeNode preRight = node.right;
        //构建左子树
        TreeNode root = dfs2(node.left);
        if (root == null) root = node;
        else {
            //左子树连接 node
            TreeNode leaf = root;
            while (leaf.right != null) leaf = leaf.right;
            leaf.right = node;
            node.left = null;
        }
        if (preRight != null) {
            //构建右子树
            TreeNode rightRoot = dfs2(preRight);
            // node 连接右子树
            node.right = rightRoot;
        }
        return root;
    }
复制代码

  JS 中序遍历:

复制代码
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var convertBiNode = function (root) {
    return dfs(root);
};

var dfs = function (node) {
    if (!node) return node;
    let leftRoot = dfs(node.left);
    if (!leftRoot) leftRoot = node;
    else {
        let leaf = leftRoot;
        while (leaf.right) leaf = leaf.right;
        leaf.right = node;
        node.left = null;
    }
    let rightRoot = dfs(node.right);
    node.right = rightRoot;
    return leftRoot;
}
复制代码

 

posted @   牛有肉  阅读(88)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示