Convert to Binary Search Tree
来源:互联网 发布:四川省网络研修 编辑:程序博客网 时间:2024/06/05 06:40
108. Convert Sorted Array to Binary Search Tree
题目:将一个有序数组转化为一个二叉排序树
思路:数组中间那个节点为树的根节点,根节点的左子树节点应该是根节点左边那部分的中间节点,根节点的右节点应该是根节点右边那部分的中间节点,后面就按照这个规律依次类推了。
public class LeetCode108 { public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public TreeNode sortedArrayToBST(int[] nums) { if(nums.length == 0) return null; return buildTree(nums, 0, nums.length - 1); } public TreeNode buildTree(int[] nums, int start, int end){ if(start <= end){ int mid = (start + end) / 2; TreeNode root = new TreeNode(nums[mid]); // 数组中间节点为树的根节点 root.left = buildTree(nums, start, mid - 1); root.right = buildTree(nums, mid + 1, end); return root; } else return null; }}
109. Convert Sorted List to Binary Search Tree
题目:将一个有序链表转化为一个二叉排序树
思路: 如果是一棵相对平衡的排序树,应该是这样的:
1. 链表中间那个节点为树的根节点
2. 根节点的左子树节点应该是根节点左边那部分的中间节点
知道上面的规律之后,问题的关键点就是寻找一个链表的中间节点了,用快慢两个指针可以轻松解决。
public class LeetCode109 { public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public TreeNode sortedListToBST(ListNode head) { ListNode slow = head; ListNode fast = head; ListNode lend = null; if(head == null) return null; //递归结束条件 // 找中间节点,即树的根节点 while(fast != null && fast.next != null){ lend = slow; // lend记录前半部分的最后一个,即左子树的最后一个 slow = slow.next; fast = fast.next.next; } if(lend == null){ //说明没有进入上面的while循环 说明这时候只有1个节点 这时候就不存在左链表的左半部分了 head = null; } else{ lend.next = null; //如果有左半部分则把左半部分链表的末尾指向空,将链表截两段 } TreeNode root = new TreeNode(slow.val); root.left = sortedListToBST(head); root.right = sortedListToBST(slow.next); // slow.next链表右半部分的开始 return root; }}
0 0
- Convert to Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted Array to Binary Search Tree
- (待解决问题)springMVC连接数据库失败
- oracle中常用连接之我见
- 关于VMware Tool为空的原因
- 由Java反序列化对象异常想到的
- 多列索引结构和原理
- Convert to Binary Search Tree
- DisplayMetrics的density,widthPixels,heightPixels属性
- Parity发布革命性区块链理念“Polkadot”
- FFMPEG结构体分析:AVFrame
- Linux程序设计01:开发工具和开发平台
- 《深入理解mybatis原理》 MyBatis的二级缓存的设计原理
- Windows下无法修改Oracle的tnsnames.ora
- Problem A: 时间类的拷贝和整体读写
- 文章标题