题目描述
二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求依然符合二叉搜索树的性质,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。
返回转换后的单向链表的头节点。
注意:本题相对原题稍作改动
示例:
1 | 输入: [4,2,5,1,3,null,6,0] |
题解
中序遍历迭代
因为要符合二叉搜索树的性质, 所以要保持顺序, 因此采用中序遍历的方法.
每遍历到一个节点, 需要将当前的左节点置空, 然后接在上一个节点上, 作为上一个节点的右节点. 因为要时刻记录上一个节点的情况, 所以提前初始化一个哨兵节点, 随着遍历的进行, 这个哨兵节点也不断移动.
所以算法大致流程为, 在中序遍历的基础上:
- 将当前从栈中弹出的节点左子节点置空
- 将当前从栈中弹出的节点接在上一个节点的右边
- 将上一个节点移动到当前节点处
1 | public TreeNode convertBiNode(TreeNode root) { |
中序遍历递归
思路跟迭代法一样, 都是在遍历到当前节点时进行操作
1 | public TreeNode convertBiNode(TreeNode root) { |