
树
ComBoat
俺好菜呀o(╥﹏╥)o
展开
-
堆中的路径
描述:将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。输入样例:5 346 23 26 24 105原创 2021-02-28 18:59:45 · 101 阅读 · 0 评论 -
哈夫曼树的基本概念
带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带有权值Wk,从根节点到每个叶子结点的长度为Lk,则每个叶子结点的带权路径长度之后就是权值乘长度累加哈夫曼树:WPL最小的二叉树哈夫曼树的特点没有度为1的结点n个叶结点的哈夫曼树共有2*n-1个结点哈夫曼树的任意非叶结点的左右子树交换后仍是哈夫曼树对于同一组数据可能构造出不同的哈夫曼树...原创 2021-02-28 17:30:50 · 203 阅读 · 0 评论 -
堆的删除
删除大顶堆的根结点将堆的最后一位补至堆顶,然后对堆进行调整将根结点的两个子结点中最大的与最后一位比较,将较大的放至根节点,若放的不是最后一位,那么以刚才的子结点为根结点,重复之前的操作。typedef int ElementType;struct Heap{ ElementType *data; int size,capacity;};void DeleteMax(Heap *h){ int parent,child; if(h->size==0) return; El原创 2021-02-28 17:15:42 · 867 阅读 · 0 评论 -
堆排序
#include<iostream>using namespace std;void minheap_fixdown(int *a,int i,int n){ int left=2*i+1; int right=2*i+2; if(left>=n) return; int min=left; if(right<n) if(a[right]<a[left]) min=right; if(a[i]<a[min]) return; els原创 2021-02-27 21:13:00 · 100 阅读 · 0 评论 -
堆的遍历
void inorder(int a[],int i,int n){ if(i>=n) return; inorder(a,2*i,n); cout<<a[i]<<" "; inorder(a,2*i+1,n);}void preorder(int a[],int i,int n){ if(i>=n) return; cout<<a[i]<<" "; inorder(a,2*i,n); inorder(a,2*i+原创 2021-02-27 21:11:15 · 756 阅读 · 0 评论 -
堆的建立
堆是一种特殊的完全二叉树堆分为大顶堆和小顶堆大顶堆是每个结点都大于其左右结点的完全二叉树大顶堆是每个结点都小于其左右结点的完全二叉树建立一个大顶堆先建立一个空堆,将数向其中插入。将小于插入的数的数向下挪typedef int ElementType;struct Heap{ ElementType *data; int size,capacity;};Heap *CreateMaxHeap(int MaxSize){ Heap *h=(Heap *)malloc(sizeof(原创 2021-02-27 21:00:33 · 150 阅读 · 1 评论 -
Complete Binary Search Tree
descriptionA Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than the node’s key.The right subtree of a node contains only nodes with keys原创 2021-02-27 19:26:22 · 174 阅读 · 0 评论 -
Root of AVL Tree
descriptionAn AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4原创 2021-02-27 15:46:56 · 166 阅读 · 0 评论 -
是否同一棵二叉搜索树
描述给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后L行,每行给出N个插入的元素,属于L个需原创 2021-02-27 09:31:37 · 318 阅读 · 0 评论 -
平衡二叉树的插入
先看一下二叉搜索树的插入平衡二叉树的调整平衡二叉树的插入是二者的综合#include<iostream>#include<cstdlib> using namespace std;typedef struct AVLNode *AVLTree;typedef int ElementType;struct AVLNode{ ElementType data; AVLTree left; AVLTree right; int he原创 2021-02-27 09:31:11 · 2067 阅读 · 4 评论 -
平衡二叉树的调整
平衡二叉树都通过旋转来调整LL型造成不平衡的结点在从上往下第一个不平衡结点的左子树的左子树上#include<iostream>using namespace std;typedef struct AVLNode *AVLTree;typedef int ElementType;struct AVLNode{ ElementType data; AVLTree left; AVLTree right; int height;};AVL原创 2021-02-26 20:50:28 · 175 阅读 · 0 评论 -
二叉搜索树的删除
首先需要找到要删除的结点,先进行查找需要删除的结点有三种情况叶结点:直接删除,并将其父结点的指针置为NULL只有一个子结点的结点:将其父结点的指针指向其的子结点有两个子结点的结点:用右子树的最小元素或左子树的最大元素代替其//定义二叉树 typedef struct TreeNode *BinTree;typedef BinTree Position;typedef int ElementType;struct TreeNode{ ElementType data; BinTre原创 2021-02-26 18:09:22 · 153 阅读 · 0 评论 -
二叉搜索树的插入
若原树为空,生成并返回一个结点的二叉搜索树若不为空,X与树的根结点的键值相比较若X大,则向右子树插入若X小,则向左子树插入原创 2021-02-26 17:37:22 · 217 阅读 · 1 评论 -
二叉搜索树的查找
查找某一值查找从根结点开始,如果树为空,返回NULL若搜索树非空,则根结点键值和X进行比较,并进行不同处理:若X小于根结点的键值,只需在左子树中继续搜索若X大于根结点的键值,只需在右子树中继续搜索若二者相等,搜索完成,返回指向此结点的指针//定义二叉树 typedef struct TreeNode *BinTree;typedef BinTree Position;typedef int ElementType;struct TreeNode{ ElementType data原创 2021-02-26 17:05:59 · 257 阅读 · 0 评论 -
二叉搜索树的基本概念
二叉搜索树,也称二叉排序树或二叉查找树二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质非空左子树的所有键值小于其根结点的键值非空右子树的所有键值大于其根结点的键值左、右子树都是二叉搜索树...原创 2021-02-26 16:43:15 · 208 阅读 · 0 评论 -
Tree Traversals Again
descriptionAn inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stack operations are: push(1); push(2); push(3);原创 2021-02-26 14:07:35 · 123 阅读 · 0 评论 -
List Leaves
descriptionGiven a tree, you are supposed to list all the leaves in the order of top down, and left to right.Input Specification:Each input file contains one test case. For each case, the first line gives a positive integer N (<=10) which is the tota原创 2021-02-26 10:46:53 · 84 阅读 · 0 评论 -
树的同构
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写字母、其左孩子结点的编号、右孩子结点原创 2021-02-26 00:28:03 · 155 阅读 · 0 评论 -
求二叉树的高度
递归实现二叉树的高度为左右子树两边的高度中的最大值加1#include<iostream>using namespace std;typedef struct TreeNode *BinTree;typedef BinTree Position;struct TreeNode{ int data; BinTree left; BinTree right;};int GetHeight(BinTree bt){ if(bt) return max(GetHeig原创 2021-02-25 21:38:23 · 97 阅读 · 0 评论 -
遍历二叉树的叶子结点
递归实现遍历二叉树的所有叶子结点#include<iostream>using namespace std;typedef struct TreeNode *BinTree;typedef BinTree Position;struct TreeNode{ int data; BinTree left; BinTree right;};void leaves(BinTree bt){ if(bt) { if(!bt->left&&!bt-原创 2021-02-25 21:32:57 · 2420 阅读 · 0 评论 -
二叉树的遍历
先序遍历访问根结点先序遍历左子树先序遍历右子树递归实现void PreOrderTraversal(BinTree bt){ if(bt) { cout<<bt->data; PreOrderTraversal(bt->left); PreOrderTraversal(bt->right); }}非递归实现使用栈遇到一个结点,访问其并就将它压入栈中先序遍历其左子树当左子树遍历完后,从栈中弹出一个结点,先序遍历其右子树void原创 2021-02-25 21:25:21 · 88 阅读 · 0 评论 -
二叉树的存储
顺序存储使用数组进行存储比较适合完全二叉树使用结点i的父结点的序号是i/2 i非根结点结点i的左子结点的序号是2i (2i<=n,否则无左子结点)结点i的右子结点的序号是2i+1 (2i+1<=n,否则无右子结点)对于非完全二叉树,可将无结点的位置记为空链表存储对于一般二叉树,使用顺序存储会造成空间的浪费链式存储是使用链表进行存储typedef struct TreeNode *BinTree;typedef BinTree Position;struct Tre原创 2021-02-25 20:14:56 · 118 阅读 · 0 评论 -
二叉树的基本概念
二叉树的定义二叉树:一个有穷的结点的集合。这个集合可以为空若不为空,则它是由根结点和称为其左子树和右子树的两个不相交的二叉树组成注意左右子树有顺序之分斜二叉树:只有左子树或只有右子树完美二叉树:除最底层的叶节点,其它结点均有左右子树完全二叉树: 只有最底层不全的完美二叉树二叉树的性质一个二叉树第i层的最大结点数为:2^(i-1)深度为k的二叉树有最大结点数为:2^k-1对任何非空二叉树,若n0表示叶结点的个数,n2表示深度为2的结点的个数,那么有n0=n2+1...原创 2021-02-25 20:00:29 · 179 阅读 · 0 评论 -
树的基本概念
树的定义树:n个节点构成的有限集合树的性质子树是不相交的;除了根节点外,每个节点有且仅有一个父节点;一棵N个节点的数有N-1条边树的基本概念结点的度:结点的子树个数树的度:树中所有结点中最大的度数叶节点:度为0的节点父节点:有子树的节点子节点:若A是B的父节点,则称B是A的子节点兄弟节点:具有同一父节点的各节点彼此是兄弟节点结点的层次:规定根结点在1层,其它结点的层数是其父结点的层数加1树的深度:树中所有结点中的最大层次是这棵树的深度...原创 2021-02-25 19:51:29 · 123 阅读 · 0 评论