二叉排序树笔记

概念

二叉排序树需要满足以下性质:
①若根节点的左子树非空,则左子树中所有的结点的值都小于等于根节点的值
②若根节点的右子树非空,与左子树非空时相反
③其左右子树皆为二叉排序树

当然也可以为空。。一棵空树也是一棵二叉排序树

实现

  • 构建
  • 访问

采用递归的方法构造二叉树

struct TreeNote {
	int l, r, data;
};

TreeNote tree[10005];

int buildTree(int pos, int data) {
	if (tree[pos].data == 0) {
		tree[pos].data=data;
		return 0;
	}
	else if (tree[pos].data > data) {
		tree[pos].l=2 * pos;
		buildTree(tree[pos].l,data);
	}
	else {
		tree[pos].r=2 * pos + 1;
		buildTree(tree[pos].r,data);
	}
	
	return 0;
}

时间复杂度经验证一般为 O ( l o g 2 n ) O(log_2n)
当树退化为一条链时,时间复杂度为 O ( n ) O(n)


访问需对构造好的二叉排序树中序遍历

int inorder(int pos) {
	if (tree[pos].data != 0) {
		inorder(tree[pos].l);
		//printf("%d\n",tree[pos].data);
		inorder(tree[pos].r);
	}

	return 0;
}

亲身感受

这算法我用起来好像特玄学,果然安安静静打快排最踏实
,可能是我太弱了~~(大雾~~

发布了23 篇原创文章 · 获赞 37 · 访问量 9063

猜你喜欢

转载自blog.csdn.net/weixin_41221124/article/details/103104060