二叉树排序 php,如何构建二叉树排序

怎么通过构建二叉树进行排序输出一维数组

我已经构建好了二叉树,但是解出二叉树的结果不是我想要的,我想要的是一个排好序的一维数组:

数据

$nodes = array(8,3,10,1,6,14,4,7,13);

构建二叉树的代码

function insertNode($node,$newNode){

//var_dump($node);

//var_dump($newNode);

//exit;

if ($node['key'] < $newNode['key']){

if (empty($node['right'])){

$node['right'] = $newNode;

}else{

$node['right'] = insertNode($node['right'],$newNode);

}

}elseif ($node['key'] > $newNode['key']){

if (empty($node['left'])){

$node['left'] = $newNode;

}else{

$node['left'] = insertNode($node['left'],$newNode);

}

}

return $node;

}

function tree($nodes)

{

$node = [

'key' => '',

'left' => '',

'right' => ''

];

$newNode = [

'key' => '',

'left' => '',

'right'=> ''

];

foreach ($nodes as $key => $value){

//insert($value,$key);

if($key == 0)

{

$node['key'] = $value;

continue;

}

$newNode['key'] = $value;

//构造二叉树

$node = insertNode($node,$newNode);

}

//解二叉树

$node = midSortNode($node);

return $node;

}

var_dump(tree($nodes));

以下是构造出来的二叉树

array (size=3)

'key' => int 8

'left' =>

array (size=3)

'key' => int 3

'left' =>

array (size=3)

'key' => int 1

'left' => string '' (length=0)

'right' => string '' (length=0)

'right' =>

array (size=3)

'key' => int 6

'left' =>

array (size=3)

...

'right' =>

array (size=3)

...

'right' =>

array (size=3)

'key' => int 10

'left' => string '' (length=0)

'right' =>

array (size=3)

'key' => int 14

'left' =>

array (size=3)

...

'right' => string '' (length=0)

以下是解二叉树的代码

function midSortNode($node){

$sortArr = [];

if (!empty($node)){

$sortArr[] = midSortNode($node['left']);

//$sortArr['left'] = midSortNode($node['left']);

array_push($sortArr,$node['key']);

$sortArr[] = midSortNode($node['right']);

//$sortArr['right'] = midSortNode($node['right']);

}

return $sortArr;

}

var_dump(midSortNode($node));

解的结果如下,貌似已经排好序,但不是一维数组

0 =>

array (size=3)

0 =>

array (size=3)

0 =>

array (size=0)

...

1 => int 1

2 =>

array (size=0)

...

1 => int 3

2 =>

array (size=3)

0 =>

array (size=3)

...

1 => int 6

2 =>

array (size=3)

...

1 => int 8

2 =>

array (size=3)

0 =>

array (size=0)

empty

1 => int 10

2 =>

array (size=3)

0 =>

array (size=3)

...

1 => int 14

2 =>

array (size=0)

...

怎么把二叉树解出来为以下一维数组

array (size=9)

0 => int 1

1 => int 3

2 => int 4

3 => int 6

4 => int 7

5 => int 8

6 => int 10

7 => int 13

8 => int 14

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值