二叉树:
前序遍历(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;
}