摘要:
从上往下打印二叉树 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 func PrintFromTopToBottom( root *TreeNode ) []int { if root == nil { return []int{} } queue := []*TreeNode{root} 阅读全文
摘要:
栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 解题思路1,用go语言slice建一个辅助栈,来顺序添加压入序列2,每次添加一个元素,去跟弹出序列比较,若不同,继续添加。若相同,则弹出,继续拿新建栈的栈顶元素去跟 阅读全文
摘要:
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 思路:一个栈存普通元素,一个最小栈存放目前位置最小的元素,只在压入的时候判断是否为空以及最小元素,其他情况正常处理。 package main import ( "math" ) var stack = []int{} 阅读全文
摘要:
顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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. 思路:第一个 阅读全文
摘要:
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 这题分两步: 第1:在树A中找到和树B的根节点的值一样的节点R,注意树的节点值可以有多个相同的值。 第2:判断树A中以R为根节点的子树是不是包含和B一样的树结构。 这题难在递归基和判断树节点为空该返 阅读全文
摘要:
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路: 归并算法的思路,注意首先判断两个链表节点都不为空,判断大小while循环之后,要看哪个链表节点不为空,使用哨兵节点的方法处理头节点。 func Merge( pHead1 *ListNod 阅读全文
摘要:
题目描述 输入一个链表,反转链表后,输出新链表的表头。 func ReverseList( head *ListNode ) *ListNode { // write code here if head == nil || head.Next == nil { return head } var p 阅读全文
摘要:
题目描述 输入一个链表,输出该链表中倒数第k个结点。 思路:要保证两个链表之间相差k个,这样计算移动才是正确结果,这题受到以前做的题目的影响,面试的时候一定要问清楚k会不会大于总长度,如果大于总长度是取模还是出错,这题就是返回错误信息 双指针,一根指针先走k步(边走边判断是否为空,因为链表长可能小于 阅读全文