题解 | #二叉搜索树与双向链表#TOP30

思路:
1.利用中序遍历,TOP24 题解。因为二叉搜索树,左边的节点比根节点小,右边的节点比根节点大。所以排序的话不就是 左节点 根节点 右节点嘛,这不就是中序遍历树嘛
2.只需要得到了当前节点,我们保存前一个节点,每次将前一个节点的右节点指向当前节点,当前节点的左节点指向前一个节点即可,这就是双向链表了

import java.util.*;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public TreeNode Convert(TreeNode pRootOfTree) {
        if (pRootOfTree == null) {
            return null;
        }
        //中序遍历  左 根 右
        Stack<TreeNode> stack = new Stack<>();
        TreeNode currentNode = pRootOfTree;
        TreeNode head = null, temp = null;
        while (!stack.isEmpty() || currentNode != null) {
            //寻找到所有左分支上的所有节点,入栈
            while (currentNode != null) {
                stack.push(currentNode);
                currentNode = currentNode.left;
            }
            //左分支上的最后一个节点
            currentNode = stack.pop();
            //如果temp是空的,说明第一次遍历 设置一下头节点
            if (temp == null) {
                temp = currentNode;
                head = temp;
            } else {
                //否则的话 当前节点的左节点,指向上一个节点,上一个节点的右节点指向当前节点
                currentNode.left = temp;
                temp.right = currentNode;

                temp = currentNode;
            }
            currentNode = currentNode.right;
        }
        return head;
    }
}
全部评论

相关推荐

03-26 13:04
已编辑
电子科技大学 算法工程师
xiaowl:你这个简历“条目上”都比较有深度性,但是实际上面试官又没法很好的评估你是怎么达到很多看上去很厉害的结果的。要避免一些看上去很厉害的包装,比如高效的内存复用策略的表达,如果仅是简单的一些内存共享机制,而且面试上也没有深挖的空间,就不要这样表达。比如,工程化模式本质上可能就是定义了一些abstract class,那也就没特别多值得讲的内容。建议简历上应该侧重那些你花了大量时间和精力解决、研究的问题,不要过分追求“丰富”,而是关注在技术深入度、问题解决能力的表现上。
没有实习经历,还有机会进...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务