给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点出了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。

考虑不同位置的节点的下一个节点:
- 节点有右子树:从右子节点出发一直沿着左指针向下遍历,就能找到下一个节点;
- 节点没有右子树:
- 节点是它父节点的左子节点:下一个节点就是它的父节点;
- 节点是它父节点的右子节点:沿着父指针一直向上遍历,直到找到一个是它父节点的左子节点的节点,这个节点的父节点就是我们要找的下一个节点。反之,则没有下一个节点;
给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点出了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。

考虑不同位置的节点的下一个节点:
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,输入前序遍历序列 {1, 2, 4, 7, 3, 5, 6, 8} 和中序遍历序列 {4, 7, 2, 1, 5, 3, 8, 6},则重建二叉树并输出它的头节点。二叉树节点的定义如下:
1 | struct BinaryTreeNode |
输入一个链表的头节点,从尾到头反过来打印出每个节点的值。链表节点定义如下:
1 | struct ListNode |
请实现一个函数,把字符串中的每个空格替换成“20%”。例如,输入“We are happy.”,则输出“We%20are%20happy.”。
在一个长度为 n+1 的数组里的所有数字都在 1~n 的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为 8 的数组 [2, 3, 5, 4, 3, 2, 6, 7],那么对应的输出是重复的数字 2 或者 3。