Bootstrap

19、复杂链表的复制?、 二叉搜索树与双向链表

题目: 复杂链表的复制?

描述:
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,
另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。
(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

<?php
/*class RandomListNode{
    var $label;
    var $next = NULL;
    var $random = NULL;
    function __construct($x){
        $this->label = $x;
    }
}*/
function MyClone($pHead)
{
    if($pHead == null)
        return null;
    $head = new RandomListNode($pHead->label);
    $tmp = $head;
    while($pHead != null){
        $tmp->label = $pHead->label;
        $tmp->next = $pHead->next;
        $tmp->random = $pHead->random;
        $pHead = $pHead->next;
        $tmp = $tmp->next;
    }
    return $head;
}

题目: 二叉搜索树与双向链表

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

<?php
/*class TreeNode{
    var $val;
    var $left = NULL;
    var $right = NULL;
    function __construct($val){
        $this->val = $val;
    }
}*/
function Convert($pRootOfTree)
{
    $root = $pRootOfTree;
    if(!$root){
        return NULL;
    }
    if(!$root->left && !$root->right){
        return $root;
    }
    //left指向比自己小的 right指向比自己大的
    $left = Convert($root->left);
    $tmp = $left;
    while($tmp && $tmp->right){
        $tmp = $tmp->right;
    }
    if($left){
        $root->left = $tmp;
        $tmp->right = $root;       
    }
     
    $right = Convert($root->right);
    if($right){
        $root->right = $right;
        $right->left = $root;       
    }
    return $left?$left:$root;
}

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;