zoukankan      html  css  js  c++  java
  • 剑指offer:二叉搜索树与双向链表

    1、题目描述:

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

    2、解题思路:

    (1)将左子树构造成双向链表,并返回链表头节点;

    (2)定位左子树双链表的尾节点;

    (3)如果左子树链表不为空,将当前root连缀其链尾;

    (4)将右子树构造出双向链表,并返回链表头节点;

    (5)如果右子树链表不为空,将当前root连缀其表头;

    (6)根据左子树链表是否为空,确定返回的节点。

    3、JavaScript实现:

    function Convert(root){
        if(root === null) return null;
        if(root.left === null && root.right === null) return root;
        // 将左子树构造成双链表,并返回链表头节点
        var left = Convert(root.left);
        var p = left;
        
        // 定位左子树双链表的尾节点
        while(p !== null && p.right !== null) p = p.right;
        
        // 如果左子树链表不为空,则将当前root链接到其链尾
        if(left !== null){
           p.right = root;
            root.left = p;
        };
        
        // 将右子树链表构造成双链表,并返回链表头节点    
        var right = Convert(root.right);
    // 如果右子树链表不为空,则将root缀到其表头 if(right !== null){ right.left = root; root.right = right; }; return left !== null ? left : root; };
  • 相关阅读:
    学习使用GitHub托管团队代码开展协作
    实验一 GIT 代码版本管理
    实验五 单元测试
    实验二 结对编程(阶段二)
    结对编程 第一阶段
    实验一 GIT代码版本管理
    实验五 单元测试
    实验二 结对编程(第二阶段)
    结对编程 第一阶段报告
    实验一 GIT代码版本管理
  • 原文地址:https://www.cnblogs.com/niconicohang/p/6648753.html
Copyright © 2011-2022 走看看