题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
<?php
/*class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}*/
function Convert($pRootOfTree)
{
if($pRootOfTree == null){
return null;
}
$pre = null;
inOrder($pRootOfTree, $pre);
$ret = $pRootOfTree;
while($ret != null && $ret->left != null){
$ret = $ret->left;
}
return $ret;
}
// 中序遍历
function inOrder($root, &$prev){
if($root==null){
return;
}
inOrder($root->left, $prev);
// 当前左边指向上一个
$root->left = $prev;
// 上一个的右边指向当前
if($prev != null){
$prev->right = $root;
}
$prev = $root;
inOrder($root->right, $prev);
}
二叉搜索树:左边不空的话,左边的节点全<根,右边不空的话,右边的全大于根
最适用于:中序遍历
原理:每个节点的left指向上一个,right指向下一个
方法:递归中序遍历,维护一个prev指针记录上个节点。注意:prev需要传实参才能记录真实的上一个节点。
inOrder(root->left,prev);
curr->left指向左
prev->right指向右(代替curr->right指向next,因为我们不知道下一个是什么,还没有遍历到)
prev移动到curr
inOrder(root->right, prev)
realme公司福利 338人发布