摘要:
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路: 因为新链表也需要复制旧链表的random指针,而random指向的 阅读全文
摘要:
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 思路: 比较经典的利用记忆搜索的题目,题目提到要遍历到结尾,于是合法路径为: 加上该结 阅读全文
摘要:
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 思路: 解法一:递归 二叉搜索树,后序遍历的数组中,最后一位是根节点,保存根节点。 除根节点外,数组中分为两部分,前一部分全部小于根节点,为左子树,另 阅读全文
摘要:
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路: 队列 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode *root) { vector<int> res; if (!root) return 阅读全文
摘要:
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长 阅读全文
摘要:
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 利用两个栈,一个栈来正常保存所有元素,另一个栈作为辅助。仅在以下情况使用: push: 当辅助栈为空,或者辅助栈顶元素大于入栈元素时,辅助栈也push(value) pop: 当辅助栈顶 阅读全文
摘要:
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路: 模拟题,划 阅读全文
摘要:
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 思路:递归 class Solution { public: void Mirr 阅读全文
摘要:
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路: 递归思想,如果B和此时遍历的节点值相同,则分别检查其左右。直到查到B的叶结点都是相同的,则是子结构。 class Solution { public: bool HasSubtree(Tree 阅读全文
摘要:
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解法一: 非递归解 class Solution { public: ListNode *Merge(ListNode *pHead1, ListNode *pHead2) { if (pHead1 阅读全文