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