-
某二叉查找树的每个节点存放一个整数,中序遍历该树得到的序列为3,4,5,则该树的画法有多少种情况?
-
对于最大堆64,42,58,23,36,47,56,11,22,27,4,2;删除掉最大元素后,调整后堆中元素为?
堆树的定义如下:
(1)堆树是一颗完全二叉树;
(2)堆树中某个节点的值总是不大于或不小于其孩子节点的值;
(3)堆树中每个节点的子树都是堆树。
- 最大或最小堆删除的对顶元素之后,将最后一个叶子结点补到对顶元素,然后再调整;
- 最大对或最小堆插入元素也是,先插入到新的最后一个叶子节点,然后再调整;
当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆。 当父节点的键值总是小于或等于任何一个子节点的键值时为最小堆。如下图所示,左边为最大堆,右边为最小堆。
所以存储的顺序变成
58,42,56,23,36,47,2,11,22,27,4
-
一个简单无向图有10个顶点,11条边,如果用邻接矩阵来存储它,那么矩阵里面会有多少个0?
10x10-(11x2) = 78
-
有一个完全二叉树的叶子节点个数为1234个,那么它最多有()个节点
-
假设一棵二叉排序树的节点的值均为10到20的整数,如果在这棵树里查找15,以下哪个序列是不可能存在的?
20,19,18,17,16,15
14,19,18,16,15
12,13,20,14,18,15
11,12,19,13,18,17,14,16,15
12,18,16,13,14,17,15
解析:二叉排序树具有的特点是对于一个父节点一定有:左孩子小于右孩子的值,按照这个逻辑,可以看出来,只有最后一个不满足条件
时间复杂度和空间复杂度
个人理解,时间复杂度是程序对每个元素遍历的次数,for循环的次数(直观的来说),
空间复杂度是完成题目的要求,需要另开辟的空间大小,比如O(1)就是,只能申请一个temp的临时变量的空间
时间复杂度的迭代求解
卡塔兰数:
具有n个节点的二叉树有几种?
单链表和双向链表的插入与删除
单链表的反转
定义链表的结点
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
为了避免“断链”,我们必须在指针更改指向之前,保存修改结点的下一结点。同时我们也必须存储上一个结点,因为next域即将修改指向该结点。因此定义三个指针,分别指向当前遍历的结点,前一个结点和后一个结点。
ListNode* ReverseList(ListNode* pHead) {
ListNode *root=pHead;
ListNode *pre=NULL;
ListNode *next=NULL;
if(pHead==NULL) return NULL;
while(root->next){
next=root->next;
root->next=pre;
pre=root;
root=next;
}
root->next=pre;
return root;
}
跳出while循环的时候,最后一个结点的next域别忘记指向前一个结点,否则就会导致“断链”。