- 浏览: 183799 次
- 性别:
- 来自: 济南
文章分类
最新评论
这篇文章主要列举数组或者链表如何转换为二叉树。
1,Convert Sorted Array to Binary Search Tree
将一个有序数组变为二叉平衡树。
因为数组有序,我们通过二分法,依次将数组元素变为数节点,代码如下:
2,Convert Sorted List to Binary Search Tree
将一个有序的链表转变为二叉平衡树。
用快慢指针,得到链表中间元素,过程和数组的类似。代码如下:
3,Flatten Binary Tree to Linked List
将一个二叉树变为一个链表
例如给定一个二叉树
1
/ \
2 5
/ \ \
3 4 6
输出:
1
\
2
\
3
\
4
\
5
\
6
通过深搜遍历二叉树,保留节点的右子树,将节点的right指向左子树,让后再将左子树指向右子树,当然这是一个递归的过程。代码如下:
我们还可以用堆栈,用先序遍历的方法依次保留二叉树节点,然后建立一颗只有右孩子的树,代码如下:
1,Convert Sorted Array to Binary Search Tree
将一个有序数组变为二叉平衡树。
因为数组有序,我们通过二分法,依次将数组元素变为数节点,代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode sortedArrayToBST(int[] nums) { TreeNode root = null; int l = 0; int r = nums.length - 1; if(l <= r) { int m = l + (r - l) / 2; root = new TreeNode(nums[m]); root.left = sortedArrayToBST(Arrays.copyOfRange(nums, l, m)); root.right = sortedArrayToBST(Arrays.copyOfRange(nums, m + 1, nums.length)); } return root; } }
2,Convert Sorted List to Binary Search Tree
将一个有序的链表转变为二叉平衡树。
用快慢指针,得到链表中间元素,过程和数组的类似。代码如下:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode sortedListToBST(ListNode head) { if(head == null) return null; ListNode fast = head; ListNode slow = head; ListNode pre = null; while(fast != null && fast.next != null && fast.next.next != null) { pre = slow; slow = slow.next; fast = fast.next.next; } TreeNode root = new TreeNode(slow.val); if(pre != null) { pre.next = null; fast = head; root.left = sortedListToBST(fast); } root.right = sortedListToBST(slow.next); return root; } }
3,Flatten Binary Tree to Linked List
将一个二叉树变为一个链表
例如给定一个二叉树
1
/ \
2 5
/ \ \
3 4 6
输出:
1
\
2
\
3
\
4
\
5
\
6
通过深搜遍历二叉树,保留节点的右子树,将节点的right指向左子树,让后再将左子树指向右子树,当然这是一个递归的过程。代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public void flatten(TreeNode root) { if(root == null) return; flatten(root.left); flatten(root.right); TreeNode left = root.left; TreeNode right = root.right; root.left = null; root.right = left; while(root.right != null){ root = root.right; } root.right = right; } }
我们还可以用堆栈,用先序遍历的方法依次保留二叉树节点,然后建立一颗只有右孩子的树,代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { static LinkedList<Integer> sb; public static void flatten(TreeNode root) { Stack<TreeNode> stack=new Stack<TreeNode>(); sb = new LinkedList<Integer>(); if(root==null) return; stack.push(root); dfs(root, stack); for(int i=1; i<sb.size(); i++){ root.right=new TreeNode(sb.get(i)); root.left = null; root = root.right; } } public static void dfs(TreeNode root, Stack<TreeNode> stack){ while(!stack.isEmpty()){ TreeNode node=stack.pop(); sb.add(node.val); if(node.right!=null){ stack.push(node.right); } if(node.left!=null){ stack.push(node.left); } } System.out.println(sb); } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 265Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 267You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 384Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 374Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 500Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 563Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 475Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 664Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 469The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 430Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 575Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 581Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 426All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 898Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 930Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 602Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 677Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 845Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 783You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 708For a undirected graph with tre ...
相关推荐
二叉树是一种在计算机科学中广泛使用的数据结构,它的每个节点最多有两个子节点,通常称为左子节点和右...解压“binarytree.rar”,查看其中的文件,理解数据结构,并根据给定的描述编写代码,以实现二叉树的前序遍历。
在LeetCode的"Balanced Binary Tree"题目中,通常要求判断给定的二叉树是否是平衡的。这个问题可以通过递归或迭代的方式来解决。递归方法是分别检查左子树和右子树是否平衡,以及它们的高度。迭代方法则可以使用层次...
题目中的"recover-the-binary-tree.zip_The Tree"文件包含了一个名为"recover the binary tree.cpp"的源代码文件,这很可能是实现这个恢复过程的C++程序。为了理解并执行这个过程,我们需要了解以下步骤: 1. **...
题目二叉树所有路径题解* Definition for a binary tree node.* function TreeNode(val) {* @para
leetcode伪代码merge-two-binary-tree 题目解读: 题目来源: 原文: Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the...
1. Math Implementation Questions(数学实现题) ...5.1 Maximum Depth of Binary Tree(二叉树的深度) 5.2 Invert Binary Tree(反转二叉树) 5.3... 5.4... 5.5... 6. String Questions(字符串相关问题)
在提供的"minimum depth of binary tree"代码中,可能包含了上述的一种或多种解冑策略。解冑代码应该能够处理各种类型的二叉树,包括平衡树和高度不均衡的树,同时具有良好的时间复杂度和空间复杂度。具体实现细节和...
至于提供的压缩包文件`BinaryTree_HeightBalanced-master`,它很可能包含了该问题的解决方案源代码,可能是用Python或其他编程语言实现的。解压后,你将能够看到具体的实现细节,包括如何创建二叉树节点、如何进行...
- **Convert Sorted List/Array to Binary Search Tree**:将有序列表或数组转换为二叉搜索树。 - **Path Sum II**:寻找所有从根节点到叶节点的路径,其路径和等于给定的目标值。 - **Flatten Binary Tree to ...
从标题和描述中可以看到,本文主要关注于LeetCode原题的总结,涵盖了162个题目,包括Find Peak Element、Isomorphic Strings、Group Shifted Strings等,这些题目都是Google Onsite面经中的常见题目。 下面将对这些...
在IT领域,数据结构与算法是编程基础的重要组成部分,...总结,Java中的二叉树题目不仅要求对数据结构有深入理解,还需要灵活运用算法。不断练习和分析这些题目,能够帮助你提高编程技巧,增强在实际工作中的竞争力。
**二叉索引树(Binary Indexed Tree,BIT)**,又称 Fenwick 树,是数据结构中的一个重要概念,尤其在前端工程师的面试中常被问到。它是一种高效的数据结构,用于快速处理数组中区间的求和问题以及部分更新操作。在...
本资源“leetcode_practices_learncard_binarytree”是一份全面的二叉树学习卡片,作者通过Java8语言完成了所有相关题目,旨在帮助学习者深入理解二叉树及其相关算法。 一、二叉树基础 二叉树是一种非线性数据结构...
以下是一些关于数据结构和算法的重要知识点,基于题目提供的内容: 1. **图的性质** - 在图论中,一个图如果有每个顶点的度数都是偶数,或者只有两个顶点的度数是奇数,那么可以找到一个哈密顿回路,即一个通过每条...
- 二叉搜索树(Binary Search Tree, BST):一种特殊的二叉树,其中每个节点的左子树只包含小于当前节点的数,每个节点的右子树只包含大于当前节点的数。 - 红黑树(Red-Black Tree):一种自平衡的二叉搜索树,每条...
代码一的解决方案首先定义了一个`diameterOfBinaryTree`函数,它递归地计算每个子节点的最大深度,并返回当前节点的最大深度。在这个过程中,通过`depth`函数计算节点的深度,同时更新全局变量`max`,存储当前找到的...
这个标签可能意味着LeetCode的二叉树专题卡片内容是开源的,也就是说,可能有一个开源项目或者代码库(如“leetcode_binary_tree-master”)包含了这些题目的解决方案或者其他学习资源。开源意味着社区可以贡献、...
从文档中可以看出,这些题目覆盖了各种类型的数据结构和算法,如数组(array)、链表(linked list)、字符串(string)、哈希表(hashtable)、栈(stack)、队列(queue)、二叉树(binary tree)、图(graph)、...
构造类题目如"7401 - Binary Tree (简单)"和"7269 - Snake Carpet (简单)",测试的是考生对于数据结构的理解和构建能力,可能是要求设计和实现特定功能的二叉树或其它数据结构。 算法类题目是核心部分,包括了"6203...