算法笔记 --第九章 提高篇(3) --数据结构专题(2)

这里写图片描述

读书笔记

这一章主要介绍了树,二叉树,二叉查找树,AVL树,并查集,堆,哈尔曼树。

根节点置于最上方,然后向下延伸出若干条边到达子节点。而子节点又向下延伸出边连接一些节点。直至到达叶子节点。

树的性质(注意对应的英文哟)

① 树可以没有结点。这种情况把树称为空树empty tree
② 树的层次layer:从根结点开始算起。即根节点为第一层,
③把结点的子树棵树称为结点的度degree。而树中最大的度称为树的度
④对与n个结点的树,边数一定是n-1
⑤叶子结点被定义为度为0的结点,因此当树中只有一个结点时,根结点也算是叶子结点
⑥结点的深度depth是指从根节点(深度为1)开始自顶而下逐层累加至该结点时的深度值。
⑦结点的高度height是指从最底层叶子节点(高度为1)开始自底而上累加至该结点时的高度值

求树深度和高度

这个是我自己加的,虽然很简单
树的深度和高度是一样的。

int maxDepth(struct node* node){
   
    if(node == NULL)           //base case 基准情况
        return 0;
    int ldepth  = maxDepth(node->lchild);     //求左子树的深度
    int rdepth = maxDepth(node->rchild);      //求右子树的深度
    return ldepth>rdepth?++ldepth:++rdepth;   //比较那个值大,并加上父亲节点,1
}




PAT 里树题的输入

PAT里树题的输入有一种是下面这样的。使用’-'表示空结点。
这个时候要用字符串去读取。如果用字符:那么数字不能读入(比如15.)如果用int,那么-不能读入。

string child1,chidl2;
cin>>child1>>child2;
if(child1[0]!='-'){
   
	do something;
}
if(child2[0]!='-'){
   
	do something;
}

在这里插入图片描述

二叉树

二叉树的定义是递归的:二叉树由根节点,左子树和右子树构成。且左子树,右子树都是二叉树。

满二叉树和完全二叉树

满二叉树:每一层的结点个数都达到了当层能达到的最大结点树。
完全二叉树:除了最后一层,其他层都达到了当层所能达到的最大结点数。且最下面一层只从左至右连续存在若干结点。


对应的定义,插入,删除等操作我就不一一记录了。

二叉树的遍历

遍历方法有:先序遍历,中序遍历,后序遍历和层次遍历。而先序遍历,中序遍历,后序遍历代表着DFS的思想。层次遍历代表着BFS的思想。
也可以这么说:先序遍历是:根左右。中序遍历是左根右。后序遍历是左右根。

先序遍历
void preorder(Node* root){
   
	if(root==NULL)
		return;
	//do something
	preorder(root->lchild);
	preorder(root->rchild);
}	
中序遍历
void inorder(Node* root){
   
	if(root==NULL)
		return;
	inorder(root->lchild);
	//do something
	inorder(root->rchild);
}
后序遍历
void postorder(Node* root){
   
	if(root==NULL)
		return;
	postorder(root->lchild);
	postorder(root->rchild);
	//do something
}
层序遍历
void layerorder(Node* root){
   
	queue<Node*> q;
	q.push(root);
	while(!q.empty()){
   
		Node* now=q.front();
		q.pop();
		//do something
		if(now-<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值