二叉树
stevewongbuaa
这个作者很懒,什么都没留下…
展开
-
lintcode lowest-common-ancestor 最近公共祖先
问题描述lintcode笔记先分别找到两个节点的路径,然后对比两条路径。代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val;原创 2016-07-22 10:41:29 · 321 阅读 · 0 评论 -
二叉排序树 b树
参考二叉排序树高效B树索引—分裂原理转载 2016-08-03 10:19:00 · 489 阅读 · 0 评论 -
lintcode balanced-binary-tree 平衡二叉树
问题描述平衡二叉树笔记这个题是没想出来,也没想起来了,最后参考了九章算法的解法。代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val =原创 2016-07-20 10:44:26 · 1935 阅读 · 0 评论 -
lintcode segment-tree-modify 线段树的修改
问题描述lintcode笔记比较左孩子的end与index,如果index<=root->left->end说明index在左子树,那就递归修改左子树,否则递归修改右子树。最后把root的max值更新。代码/** * Definition of SegmentTreeNode: * class SegmentTreeNode { * public: * int start, end,原创 2016-07-21 17:14:45 · 516 阅读 · 0 评论 -
lintcode segment-tree-query 线段树的查询
问题描述lintcode笔记假设对于root来说的中间分界点为rmid=(rstart+rend)/2,关键是要找到start、end和中间分界点rmid的关系以及相应的处理方法。如果start和end都小于等于rmid,那就在root->left那边继续查询如果start 和 end 都大于rmid, 那就在 root->right 那边继续查询如果start 小于等于 rmid 且 end原创 2016-07-21 15:59:15 · 453 阅读 · 0 评论 -
lintcode construct-binary-tree-from-inorder-and-postorder-traversal 中序遍历和后序遍历树构造二叉树
问题描述lintcode笔记还是要使用递归,利用vector的迭代器iter,设计一个递归函数TreeNode* buildTree(iter istart, iter iend, iter pstart, iter pend)表示,使用从istart-iend的数,和从pstart到pend的数,来造这棵树,返回树的根节点。在中序序列中找到root节点,在root节点左边的用来构造root的左子树原创 2016-07-21 10:00:25 · 453 阅读 · 0 评论 -
lintcode binary-tree-serialization 二叉树的序列化与反序列化
问题描述lintcode参考Serialization/Deserialization of a Binary Tree LintCode Binary Tree Serialization笔记可以用先序遍历 和 使用"#"来表示NULL的方法来序列化,最后也用先序遍历来反序列化。代码/** * Definition of TreeNode: * class TreeNode { * pub原创 2016-07-21 09:26:40 · 886 阅读 · 0 评论 -
lintcode binary-tree-level-order-traversal 二叉树的层次遍历
问题描述lintcode笔记关键点,是要建立队列来实现广度优先遍历,同时以NULL来标记每一层的结束,有点神奇啊。代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { *原创 2016-07-20 19:12:00 · 547 阅读 · 0 评论 -
lintcode flatten-binary-tree-to-linked-list 将二叉树拆成链表 前序扁平化 中序扁平化
问题描述lintcode笔记看了半天还是比较能接受递归的解法。参考: [LeetCode] flatten binary tree 扁平化二叉树 思路:假设以下函数 TreeNode covert2link(TreeNode *root)可以将一棵树转化为符合要求的链表,并返回链表的尾部(链表的头部必定是root)。那么该怎么做呢?那就是:首先,调用这个函数把左子树转化为符合要求的链表,原创 2016-07-20 16:04:47 · 855 阅读 · 0 评论 -
lintcode segment-tree-build 线段树的构造
问题描述lintcode笔记把中间点算出来,然后使用递归构造。要注意start > end的情况。代码/** * Definition of SegmentTreeNode: * class SegmentTreeNode { * public: * int start, end; * SegmentTreeNode *left, *right; * Segmen原创 2016-07-21 15:50:36 · 464 阅读 · 0 评论 -
lintcode线段树的应用
问题描述lintcode区间最小数笔记个人感觉,线段树就是可以将数据拆分成小区间的统计结果,如果需要大量的区间查询,可以使用线段树。代码/** * Definition of Interval: * classs Interval { * int start, end; * Interval(int start, int end) { * this->sta原创 2016-07-22 07:56:29 · 337 阅读 · 0 评论 -
lintcode minimum-depth-of-binary-tree 二叉树最小深度
问题描述lintcode笔记与求最大深度不同的是,求最小深度要考虑到左孩子或者右孩子为空的情况。如果左孩子或者右孩子为空,空的那一边不能用来计算深度,因此要求max(取非空那一边的深度),而不是求min。代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *le原创 2016-07-20 18:13:55 · 649 阅读 · 0 评论 -
lintcode maximum-depth-of-binary-tree 二叉树的最大深度
问题描述lintcode笔记代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left原创 2016-07-20 17:42:19 · 770 阅读 · 0 评论 -
lintcode convert-sorted-array-to-binary-search-tree-with-minimal-height 把排序数组转换为高度最小的二叉搜索树
问题描述lintcode笔记buildTree函数最后别忘了return root代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val =原创 2016-07-20 11:56:02 · 604 阅读 · 0 评论 -
lintcode binary-tree-paths 二叉树的所有路径
问题描述lintcode笔记代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left原创 2016-07-20 11:39:12 · 589 阅读 · 0 评论 -
lintcode binary-tree-maximum-path-sum 二叉树中的最大路径和
问题描述笔记设置buff[i]为:后序遍历时,以当前节点结束的最大路径和。竟然做出来,有点感动。代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this原创 2016-07-26 22:51:17 · 613 阅读 · 0 评论 -
lintcode validate-binary-search-tree 验证二叉查找树
问题描述lintcode笔记代码1是用到中序遍历,要求中序遍历是严格的增序。用到了辅助空间。代码2是leetcode上面的解法,用到了prev指针记录前一个节点,省下了辅助空间,而且要注意prev传进去还应该是引用。代码1/** * Definition of TreeNode: * class TreeNode { * public: * int val; * Tr原创 2016-07-22 17:03:33 · 912 阅读 · 0 评论 -
lintcode search-range-in-binary-search-tree 二叉搜索树中搜索区间
问题描述lintcode笔记一开始没有想到怎样利用二叉搜索树的性质简化程序,强行中序遍历了树,如代码1。其实还是应该利用二叉搜索树的性质。中序遍历是一定的访问左孩子--访问当前节点--访问右孩子可以做的改进是:k1比当前节点小才去访问左孩子。(可能还遗漏了一些大于k1小于当前节点的数)k2比当前节点大才去访问右孩子。(可能还遗漏了一些大于当前节点小于k2的数)如代码2。代码1 暴力中序遍历/*原创 2016-07-22 14:21:57 · 356 阅读 · 0 评论 -
lintcode subtree 子树
问题描述lintcode笔记代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left原创 2016-07-20 18:50:46 · 341 阅读 · 0 评论