面试算法52:展平二叉搜索树

编程入门 行业动态 更新时间:2024-10-26 23:39:20

面试<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法52:展平二叉搜索树"/>

面试算法52:展平二叉搜索树

题目

给定一棵二叉搜索树,请调整节点的指针使每个节点都没有左子节点。调整之后的树看起来像一个链表,但仍然是二叉搜索树。

分析

看起来需要按照节点的值递增的顺序遍历二叉搜索树中的每个节点,并将节点用指向右子节点的指针连接起来。这就容易让人联想到二叉树的中序遍历,只是在这里每遍历到一个节点要把前一个节点的指向右子节点的指针指向它。

public class Test {public static void main(String[] args) {TreeNode node1 = new TreeNode(1);TreeNode node2 = new TreeNode(2);TreeNode node3 = new TreeNode(3);TreeNode node4 = new TreeNode(4);TreeNode node5 = new TreeNode(5);TreeNode node6 = new TreeNode(6);node4.left = node2;node4.right = node5;node2.left = node1;node2.right = node3;node5.right = node6;TreeNode result = increasingBST(node4);System.out.println(result);}public static TreeNode increasingBST(TreeNode root) {Stack<TreeNode> stack = new Stack<>();TreeNode cur = root;TreeNode prev = null;TreeNode first = null;while (cur != null || !stack.isEmpty()) {while (cur != null) {stack.push(cur);cur = cur.left;}cur = stack.pop();if (prev != null) {prev.right = cur;}else {first = cur;}prev = cur;cur.left = null;cur = cur.right;}return first;}
}

中序遍历的迭代算法:

public class Test {public static void main(String[] args) {TreeNode node1 = new TreeNode(1);TreeNode node2 = new TreeNode(2);TreeNode node3 = new TreeNode(3);TreeNode node4 = new TreeNode(4);TreeNode node5 = new TreeNode(5);TreeNode node6 = new TreeNode(6);node4.left = node2;node4.right = node5;node2.left = node1;node2.right = node3;node5.right = node6;List<Integer> result = inorderTraversal(node4);System.out.println(result);}public static List<Integer> inorderTraversal(TreeNode root) {List<Integer> nodes = new LinkedList<>();Stack<TreeNode> stack = new Stack<>();TreeNode cur = root;while (cur != null || !stack.isEmpty()) {while (cur != null) {stack.push(cur);cur = cur.left;}cur = stack.pop();nodes.add(cur.val);cur = cur.right;}return nodes;}
}

更多推荐

面试算法52:展平二叉搜索树

本文发布于:2023-11-17 13:08:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1642475.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   展平二叉

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!