随笔分类 -  单向链表、二叉树

这里是来自指针的怨念,单向链表,二叉树等着你
摘要:题意: 给定两棵树,将两棵树合并成一颗树 输入 方法2需要提供额外内存,但是时间居然比方法1少,简直不可思议 阅读全文
posted @ 2017-06-14 19:58 Breeze0806 阅读(1068) 评论(0) 推荐(0)
摘要:判断链表是否是回文。 我直接将链表的一半进行倒置,然后将两半的链表进行比较 阅读全文
posted @ 2016-03-18 21:53 Breeze0806 阅读(172) 评论(0) 推荐(0)
摘要:找到所有根到叶子的路径 深度优先搜索(DFS), 即二叉树的先序遍历。 阅读全文
posted @ 2016-03-18 20:30 Breeze0806 阅读(151) 评论(0) 推荐(0)
摘要:去掉链表中相应的元素值 阅读全文
posted @ 2016-03-17 21:13 Breeze0806 阅读(178) 评论(0) 推荐(0)
摘要:删除从后往前数的第n个节点 我的做法是将两个指针first,second 先将first指向第n-1个,然后让first和second一起指向他们的next,直到first->next->next为空 最后只要删除second->next 阅读全文
posted @ 2016-03-16 19:44 Breeze0806 阅读(131) 评论(0) 推荐(0)
摘要:找出最短的从叶子到根的路径长 可以回忆Maximum Depth of Binary Tree的写法,只不过在!root,我把它改成了10000000,还有max函数改成了min函数,最后的值如果是10000000,毫无疑问这棵树肯定为空,因此在最后有(d>=1000000)?0:d; 1 /** 阅读全文
posted @ 2016-03-09 21:58 Breeze0806 阅读(137) 评论(0) 推荐(0)
摘要:二叉树的从叶子到根的和是否存在 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : 阅读全文
posted @ 2016-03-07 20:21 Breeze0806 阅读(118) 评论(0) 推荐(0)
摘要:题意是倒过来层次遍历二叉树 下面我介绍下BFS的基本框架,所有的BFS都是这样写的 struct Nodetype { int d;//层数即遍历深度 KeyType m;//相应的节点值 } queue<Nodetype> q; q.push(firstnode); while(!q.empty( 阅读全文
posted @ 2016-03-01 20:23 Breeze0806 阅读(213) 评论(0) 推荐(0)
摘要:判断一棵树是否自对称 可以回忆我们做过的Leetcode 100 Same Tree 二叉树和Leetcode 226 Invert Binary Tree 二叉树 先可以将左子树进行Invert Binary Tree,然后用Same Tree比较左右子树 而我的做法是改下Same Tree的函数 阅读全文
posted @ 2016-03-01 20:01 Breeze0806 阅读(149) 评论(0) 推荐(0)
摘要:判断一棵树是否是平衡树,即左右子树的深度相差不超过1. 我们可以回顾下depth函数其实是Leetcode 104 Maximum Depth of Binary Tree 二叉树 1 /** 2 * Definition for a binary tree node. 3 * struct Tre 阅读全文
posted @ 2016-03-01 19:10 Breeze0806 阅读(134) 评论(0) 推荐(0)
摘要:合并两个已排序的链表,考到烂得不能再烂的经典题,但是很多人写这段代码会有这样或那样的问题 这里我给出了我的C++算法实现 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListN 阅读全文
posted @ 2016-03-01 16:36 Breeze0806 阅读(162) 评论(0) 推荐(0)
摘要:就是将链表中的重复元素去除 我的方法很简单就是如果链表的前后元素相同的话,将后一个元素删除 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * 阅读全文
posted @ 2016-02-24 10:36 Breeze0806 阅读(129) 评论(0) 推荐(0)
摘要:Given 1->2->3->4->5->NULL, return 1->3->5->2->4->NULL. 就是将序号为单数的放在前面,而序号为偶数的放在后面 我的方法是讲序号为偶数的的插入到链表末尾。 1 /** 2 * Definition for singly-linked list. 3 阅读全文
posted @ 2016-02-24 10:28 Breeze0806 阅读(139) 评论(0) 推荐(0)
摘要:将单向链表反转完成如图操作,依次进行即可123 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListN... 阅读全文
posted @ 2016-01-25 22:40 Breeze0806 阅读(175) 评论(0) 推荐(0)
摘要:给定一个二叉搜索树的两个节点,找出他们的最近公共祖先,如, _______6______ / \ ___2__ ___8__ / \ / \ 0 4 7 9 / \ 3 52和8的最近公共祖先是6,2和4的最近公共祖先是2,假设找的3和5 TreeNode* l =lowestCommonAnces 阅读全文
posted @ 2016-01-24 23:13 Breeze0806 阅读(233) 评论(0) 推荐(0)
摘要:二叉树的中序遍历,即左子树,根, 右子树 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int 阅读全文
posted @ 2016-01-24 21:36 Breeze0806 阅读(143) 评论(0) 推荐(0)
摘要:二叉树的基础操作:二叉树的先序遍历(详细请看数据结构和算法,任意本书都有介绍),即根,左子树,右子树,实现方法中还有用栈实现的,这里不介绍了 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; ... 阅读全文
posted @ 2016-01-24 21:33 Breeze0806 阅读(171) 评论(0) 推荐(0)
摘要:计算二叉树的最大深度 我的方法是找出两个子树的长度中最长的那个,然后加1 1 class Solution { 2 public: 3 int maxDepth(TreeNode* root) { 4 if(!root) return 0; 5 else return max(maxDepth(ro 阅读全文
posted @ 2016-01-16 20:07 Breeze0806 阅读(124) 评论(0) 推荐(0)
摘要:就是判断两棵树的值和结构是否相同注意:要判断是否所有的树节点是否为NULL 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; ... 阅读全文
posted @ 2016-01-16 18:51 Breeze0806 阅读(157) 评论(0) 推荐(0)
摘要:将链表节点序号(不是值)是偶数的放到链表后面, 如Given1->2->3->4->5->NULL,return1->3->5->2->4->NULL.我首先统计了下链表的大小cnt,同时求出链表尾端end,然后直接将每个链表节点序号是奇数的点后面的节点放到end后面去,同时更新end,这样更新cn... 阅读全文
posted @ 2016-01-16 17:33 Breeze0806 阅读(997) 评论(0) 推荐(0)