数据结构与算法(php)-二叉树

二叉树:

前序遍历(pre-order):
根 -> 左 -> 右
中序遍历(in-order):
左 -> 根 -> 右
后序遍历(post-order):
左 -> 右 -> 根

二叉树的前序,后序,中序遍历的时间复杂度:O(n),n为二叉树的节点数

平衡二叉树(AVL树)
它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。

二叉搜索树/二叉排序树(BST)
左子树上所有结点的值均小于根结点
右子树上所有结点的值均大于根结点

时间复杂度O(logN)
空间复杂度O(N)

特点:
中序遍历是有序的

代码实现

/**
 * 二叉树结点的定义
 * 
 * class TreeNode 
 * {
 *     public $val = null;
 *     public $left = null;
 *     public $right = null;
 *     function __construct($value) 
 * 		{ 
 * 			$this->val = $value;
 * 		}
 * }
 */

前序遍历

 function preorderTraversal($root) 
 {
 	if (is_null($root)) return [];
 	$left = $right = array();
 	if (!is_null($left))  $this->preorderTraversal($root->left) ;
 	if(!is_null($right)) $this->preorderTraversal($root->right);
	return array_merge([$rooit->val], $left, $right);
 	
 }

中序遍历

function inorderTraversal($root) 
{
	$resukt = array();
	$this->travel($root, $result);
	return $result;
}

function travel($root, &$result)
{
	if ($root == null) return ;
	$this->travel($root->left, $result);
	$result[] = $root->val;
	$this->travel($root->right, $result); 
}

后序遍历

function postorderTraversal($root) 
{
	$result = array();
	$this->travel($root, $result);
	return $result;
}

function travel($root, &$result) 
{
	if ($root == null) return ;
	$this->travel($root->left, $result);
	$this->travel($root->right, $result);
	$result[] = $root->val;
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值