数据结构
CV伍六七
一只无厘头的CV算法工程师,一个不服输的斜杠青年,也是CV界的段子手。
小镇青年,双非出身,考研985,在卷到离谱的CV圈里成功上岸,目前正在万米裸泳中!冲冲冲!!!。
一边记录成长,一边分享收获。
展开
-
二叉树的所有的遍历算法
声明 这些代码都不是直接搬过去马上能用的代码,只是学习思路,代码风格的。只给出了函数主体,并不是一个完整的c/c++文件。 递归前序遍历void preOrder(Tree T){ if(T){ visit(T); preOrder(T->lchild); preOrder(T->rchild); }}递归中序原创 2017-07-20 17:23:29 · 272 阅读 · 0 评论 -
有父节点二叉树找中序遍历后继节点
数据结构精妙至极! 求后继节点: 1)为NULL,返回NULL; 2)节点有右子树,则返回右子树的最左节点; 3)没有右子树则向父节点求 **这时候有两个情况,如果该节点是父节点的左节点,则返回父节点。 否则判断该父节点,若该父节点是其父节点的左节点则返回该父节点,否则再判断它的父节点……这样一直到根节点,如果还没有得到结果,则返回为NULL**/*struct Tree原创 2018-01-20 22:42:11 · 527 阅读 · 1 评论 -
求二叉排序树的第k个节点
记录下自己愚蠢的一天 首先题目一看都能想到要用中序遍历打方法int index=0;TreeNode* KthNode(TreeNode* root, int k){ if(root != NULL) { //中序遍历寻找第k个 KthNode(root->left,k); index++; if(index == k)原创 2018-01-26 16:49:35 · 420 阅读 · 0 评论 -
之字型打印二叉树(当年PAT跪了的题目,从大同见小异)
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 题目咋一看,很简单,可是实现起来还是有不少要注意的细节,最关键的是奇数层和偶数层要进行区分。我的方法就是每一次都是直接压入队列的方法,咋一听和我们层序遍历一模一样,对的,确实是一模一样,不同的是出队的时候把所有节点压入到一个数组中,当则一层是偶数层时翻原创 2018-01-14 22:30:24 · 233 阅读 · 0 评论 -
平衡二叉树详解
出处:AVL平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一转载 2017-07-24 20:47:40 · 502 阅读 · 0 评论 -
森林、树、二叉树的相互转换
这个是我认为说得比较清晰的了 二叉树、树、森林的相互转换转载 2017-07-24 16:01:59 · 289 阅读 · 0 评论 -
求树的最大宽度(层次遍历法)
二叉树宽度:使用队列,层次遍历二叉树。在上一层遍历完成后,下一层的所有节点已经放到队列中,此时队列中的元素个数就是下一层的宽度。以此类推,依次遍历下一层即可求出二叉树的最大宽度。 怎么一层一层地分开呢?用一个变量len来记录当前层的结点数,出一个结点就len–,len==0的时候就退出循环,然后又把队列中的节点数赋值给len int getWidth(BiNode head) {原创 2017-07-21 08:57:37 · 10235 阅读 · 0 评论 -
一般二叉树求最近公共祖先(最简单的代码)
当遍历到一个root点的时候,1.判断root是不是null如果root为null,那么就无所谓祖先节点,直接返回null就好了2.如果root的左子树存在p,右子树存在q,那么root肯定就是最近祖先3.如果pq都在root的左子树,那么就需要递归root的左子树,右子树同理TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, Tr转载 2017-07-21 08:43:45 · 2010 阅读 · 2 评论 -
叶子结点带权路径长度和(先序遍历法和层序遍历法)
先序遍历//deep初值为0int leafNodeLength(Tree r,deep){ static int wpl=0; if(r->lchild==NULL&&r->rchild==NULL) wpl+=deep*r->weight; if(r->lchild) leafNodeLength(r->lchild,deep+1);原创 2017-07-21 08:16:40 · 1416 阅读 · 0 评论 -
前序中序/后序中序确定二叉树
这个代码网上不要太多了,考研复习,贴出比较容易理解的代码,但是写得丑(只是写了比较完整的思路,你看我类型定义都没定义呢)。。。 前序、中序确定二叉树void preInCreat(Tree r,ElemType a[],ElemType b[],int as,int ad,int bs,int bd){ //as:A数组第一个元素的下标,as:A数组最后一个元素下标,bs,as,bs初原创 2017-07-20 20:53:18 · 647 阅读 · 0 评论 -
求树的总结点数量,叶子节点数
求总节点数int num_of_nodes(BinTree t){ if(t == NULL) return 0; return 1+num_of_nodes(t->llchild)+num_of_nodes(t->rlchild);}求叶子节点数int num_of_nodes(BinTree t){ if(t == NULL) return 0; if(t->转载 2017-07-20 20:49:49 · 3762 阅读 · 0 评论 -
求树的高度
递归算法int high(Tree r){ if(r==NULL) return 0; int left=high(r->lchild); int right=high(r->rchild); return (left>right? left:right)+1;}非递归算法**每访问到一层的最右结点就高度+1,怎么定位每一层的最右结点呢??**每原创 2017-07-20 20:46:09 · 455 阅读 · 0 评论 -
二叉树遍历(递归+非递归+层序)看这个一个就够了
#include<iostream>#include <vector>#include <queue>#include <stack>using namespace std;struct TreeNode { int val; TreeNode *left,*right; TreeNode(int x):val(x)...原创 2018-12-16 11:25:34 · 152 阅读 · 0 评论