随笔分类 -  数据结构考研专题

摘要:(一)快速排序 思想:用枢纽元素pivot将待排数组分成两个子表,左表中元素全都小于右表元素,,递归执行 int partition(int a[],int low,int high){ int pivot=a[low]; while(low<high){ while(low<high&&a[hig 阅读全文
posted @ 2020-11-05 21:26 Hello-Vivi 阅读(156) 评论(0) 推荐(0)
摘要:针对考研王道上的链表题目,总结出几个经典的链表算法,更新中。。。 //结构体 struct ListNode { int data; struct ListNode *next; }; //建立 ListNode* readlist(){ //按照读入顺序建立链表,尾插法(带头结点) int n; 阅读全文
posted @ 2020-10-22 20:45 Hello-Vivi 阅读(180) 评论(0) 推荐(0)
摘要:题目: 给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。 分析:中序遍历后进行建树 方法一:递归中序遍历结果存到向量中,再根据向量中的值进行建树 void inorder(TreeNode* root,vector<int> &v 阅读全文
posted @ 2020-09-08 20:01 Hello-Vivi 阅读(202) 评论(0) 推荐(0)
摘要:方法:用递归函数求出每个子树的高度,再判断|高度差|>1时不是平衡二叉树 bool isBalanced(TreeNode* root) { if(root==NULL) return true;//空树是平衡二叉树 //前序遍历式的递归 int left=height(root->left); i 阅读全文
posted @ 2020-09-05 21:29 Hello-Vivi 阅读(179) 评论(0) 推荐(0)
摘要:方法一:判断中序遍历数列是否递增(非递归) bool isValidBST(TreeNode* root) { stack <TreeNode*>s; TreeNode* p=root; if(root==NULL) return true; long long temp=(long long)IN 阅读全文
posted @ 2020-09-05 21:16 Hello-Vivi 阅读(471) 评论(0) 推荐(0)
摘要:力扣这两算法的方法差不对,一并整理。 (一)判断B是否是A的子树 recur(A, B) 函数: 终止条件:当节点 BB 为空:说明树 BB 已匹配完成,因此返回 true;当节点 AA 为空:说明已经越过树 AA 叶子节点,即匹配失败,返回 false;当节点 AA 和 BB 的值不同,返回 fa 阅读全文
posted @ 2020-09-02 20:22 Hello-Vivi 阅读(319) 评论(0) 推荐(0)
摘要:将二叉树常见的递归算法罗列如下: (一)前序/中序/后序遍历 以中序为例: void inorder(Node* root){ //从根节点的指针开始 if(root!=NULL){ inorder(root->left); cout<<root->data<<" "; inorder(root-> 阅读全文
posted @ 2020-08-18 21:32 Hello-Vivi 阅读(1864) 评论(0) 推荐(1)
摘要:非递归层次遍历: 利用队列先进先出特性,分层次存储入队后输出。(下面代码是常见的一个) void levelorder(Node* root){ queue<Node*> q; //指针队列 Node* p=root; //p依次遍历树 q.push(p); while(!q.empty()){ N 阅读全文
posted @ 2020-08-18 20:11 Hello-Vivi 阅读(393) 评论(0) 推荐(0)