菜鸟刷题之路——Q17

问题描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

解题思路

  1. 思路采用的中序遍历,实现的是采用非递归。
  2. 将左指针指向前节点,右节点指向后节点。

Code

    public TreeNode Convert(TreeNode pRootOfTree) {
        Stack<TreeNode> st = new Stack();
        if (pRootOfTree == null) return pRootOfTree;
        // 先向左走,是为了得到头结点指针
        TreeNode node = pRootOfTree;
        while(node != null) {
            st.add(node);
            node = node.left;
        }
        pRootOfTree = st.pop();
        TreeNode rear = pRootOfTree;
        node = pRootOfTree.right;
        while (!st.isEmpty() || node != null) {
            while(node != null) {
                st.add(node);
                node = node.left;
            }
            if (!st.isEmpty()) {
                node = st.pop();
                // 改动左指针,右指针按照中序遍历的过程移动
                rear.right = node;
                node.left = rear;
                rear = node;
                node = node.right;
            }
        }
        return pRootOfTree;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个程序是一个字符串处理的程序。解释如下: 1. 引入头文件 `iostream`,并且使用命名空间 `std`。 2. 定义了一个名为 `mystery1` 的函数,其中参数 `s1` 和 `s2` 分别是字符指针类型。 3. 在主函数中声明两个字符数组 `string1` 和 `string2`,它们的长度都是 80。 4. 使用 `cout` 输出提示信息 `"Enter two strings:"`,并换行。 5. 使用 `cin` 读取用户输入的两个字符串,分别存储到 `string1` 和 `string2` 数组中。 6. 调用函数 `mystery1`,将 `string2` 数组的内容复制到 `string1` 数组中。 7. 使用 `cout` 输出 `string1` 数组的内容,并在结尾换行。 8. 返回值 0,表示程序执行成功。 函数 `mystery1` 的作用是将第二个字符串 `s2` 的内容复制到第一个字符串 `s1` 中。具体实现如下: 1. 使用 `while` 循环,判断当前指针 `s1` 所指向的字符是否为字符串结束符 `\0`。 2. 如果当前指针所指向的字符不是字符串结束符,则将指针 `s1` 向后移动一位。 3. 使用 `for` 循环,将指针 `s2` 所指向的字符赋值给指针 `s1` 所指向的字符,并且将指针 `s1` 和 `s2` 都向后移动一位。 4. 因为 `for` 循环中第三个表达式是空语句,所以循环体中并没有实际的操作。 5. 循环回到第一步,直到指针 `s1` 指向字符串结束符 `\0`,跳出循环。 6. 函数执行完毕,返回。 所以,程序的功能是读取用户输入的两个字符串,然后将第二个字符串的内容复制到第一个字符串中,并输出第一个字符串的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值