- 浏览: 183798 次
- 性别:
- 来自: 济南
文章分类
最新评论
与数组和链表相比,树的题目比它们要难一些,我们往往通过递归来处理树的题目,下面是对leetcode有关树操作的几道题目,包括找出树的所有路径,计算完全二叉树节点个数,二叉搜索树的最近公共祖先,普通二叉树的最近公共祖先。
1,Binary Tree Paths
给定一个二叉树,输出所有根节点到叶子节点的路径。
用深度优先遍历(DFS),依次保留搜索过的节点。代码如下:
2,Count Complete Tree Nodes
给定一个完全二叉树,计算树中节点的个数。
既然是完全二叉树,我们要好好利用它特有的性质,完全二叉树只有最后一层不满,并且节点是从左到右排列的。一个n层满二叉树的节点个数为2^n - 1,因此我们可以利用这些性质来处理这道题。代码如下:
3,Lowest Common Ancestor of a Binary Search Tree
给定一个二叉搜索树,查找两个节点的最近公共祖先。
不清楚公共祖先定义的查阅网上资料。二叉搜索树的性质是左子树的值都小于根节点值,右子树的值都大于根节点的值,我们可以通过值的比较来判断要查找的两个节点的位置,从而找到公共祖先。代码如下:
4,Lowest Common Ancestor of a Binary Tree
给定一个二叉树,找到两个节点的公共祖先。
与第三题不同,它是一个普通的二叉树,我们不能通过值来判断两个节点的位置,我们用深度优先搜索,通过返回值来判断两个节点的位置,代码如下:
1,Binary Tree Paths
给定一个二叉树,输出所有根节点到叶子节点的路径。
用深度优先遍历(DFS),依次保留搜索过的节点。代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<String> binaryTreePaths(TreeNode root) { List<String> list = new LinkedList<String>(); if(root == null) return list; String str = String.valueOf(root.val); DFS(root, str, list); return list; } private void DFS(TreeNode root, String str, List<String> list) { if(root.left == null && root.right == null) list.add(str); if(root.left != null) DFS(root.left, str + "->" + root.left.val, list); if(root.right != null) DFS(root.right, str + "->" + root.right.val, list); } }
2,Count Complete Tree Nodes
给定一个完全二叉树,计算树中节点的个数。
既然是完全二叉树,我们要好好利用它特有的性质,完全二叉树只有最后一层不满,并且节点是从左到右排列的。一个n层满二叉树的节点个数为2^n - 1,因此我们可以利用这些性质来处理这道题。代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int countNodes(TreeNode root) { if(root == null) return 0; int leftnode = -1; int rightnode = -1; return countNodes(root, leftnode, rightnode); } private int countNodes(TreeNode root, int leftnode, int rightnode){ if(leftnode == -1) { TreeNode cur = root; while(cur != null) { leftnode ++; cur = cur.left; } } if(rightnode == -1) { TreeNode cur = root; while(cur != null) { rightnode ++; cur = cur.right; } } if(leftnode == rightnode) return (1 << leftnode) - 1; return 1 + countNodes(root.left, leftnode -1, -1) + countNodes(root.right, -1, rightnode -1); } }
3,Lowest Common Ancestor of a 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 lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null || root == p || root == q) return root; if(p.val < root.val && q.val < root.val) return lowestCommonAncestor(root.left, p, q); if(p.val > root.val && q.val > root.val) return lowestCommonAncestor(root.right, p, q); return root; } }
4,Lowest Common Ancestor of a Binary 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 lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null || root == p || root == q) return root; TreeNode left = lowestCommonAncestor(root.left, p, q); TreeNode right = lowestCommonAncestor(root.right, p, q); if(left != null && right != null) return root; if(left == null) return right; return left; } }
发表评论
-
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 ...
相关推荐
在LeetCode这样的在线编程平台上,二叉树的题目通常是让你编写一个函数,该函数接收一个二叉树的根节点(通常是作为树节点对象的指针)并返回一个节点值的列表,这个列表反映了前序遍历的顺序。例如,如果给定的...
平衡二叉树(Balanced Binary Tree)是一种特殊的二叉树,它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 平衡二叉树的主要优点在于它能保持较好的搜索性能。在二叉搜索树...
题目中的"recover-the-binary-tree.zip_The Tree"文件包含了一个名为"recover the binary tree.cpp"的源代码文件,这很可能是实现这个恢复过程的C++程序。为了理解并执行这个过程,我们需要了解以下步骤: 1. **...
题目二叉树所有路径题解* Definition for a binary tree node.* function TreeNode(val) {* @para
在提供的"minimum depth of binary tree"代码中,可能包含了上述的一种或多种解冑策略。解冑代码应该能够处理各种类型的二叉树,包括平衡树和高度不均衡的树,同时具有良好的时间复杂度和空间复杂度。具体实现细节和...
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(字符串相关问题)
- **Validate Binary Search Tree**:验证一个二叉树是否为二叉搜索树。 - **Recover Binary Search Tree**:恢复二叉搜索树中的两个错误节点。 - **Binary Tree Path**:找到二叉树中和为目标值的路径。 - **...
至于提供的压缩包文件`BinaryTree_HeightBalanced-master`,它很可能包含了该问题的解决方案源代码,可能是用Python或其他编程语言实现的。解压后,你将能够看到具体的实现细节,包括如何创建二叉树节点、如何进行...
从标题和描述中可以看到,本文主要关注于LeetCode原题的总结,涵盖了162个题目,包括Find Peak Element、Isomorphic Strings、Group Shifted Strings等,这些题目都是Google Onsite面经中的常见题目。 下面将对这些...
**二叉索引树(Binary Indexed Tree,BIT)**,又称 Fenwick 树,是数据结构中的一个重要概念,尤其在前端工程师的面试中常被问到。它是一种高效的数据结构,用于快速处理数组中区间的求和问题以及部分更新操作。在...
在IT领域,数据结构与算法是编程基础的重要组成部分,...总结,Java中的二叉树题目不仅要求对数据结构有深入理解,还需要灵活运用算法。不断练习和分析这些题目,能够帮助你提高编程技巧,增强在实际工作中的竞争力。
本资源“leetcode_practices_learncard_binarytree”是一份全面的二叉树学习卡片,作者通过Java8语言完成了所有相关题目,旨在帮助学习者深入理解二叉树及其相关算法。 一、二叉树基础 二叉树是一种非线性数据结构...
- 完全二叉树(Complete Binary Tree):除了最后一层外,每一层都被完全填满,且最后一层所有节点都集中在左边。 - 平衡二叉树(Balanced Binary Tree):任何节点的两个子树的高度差不超过1的二叉树。 - 二叉搜索...
1. **图的性质** - 在图论中,一个图如果有每个顶点的度数都是偶数,或者只有两个顶点的度数是奇数,那么可以找到一个哈密顿回路,即一个通过每条边恰好一次的路径。这是欧拉路径和哈密顿路径的一个基本定理。 2. *...
代码一的解决方案首先定义了一个`diameterOfBinaryTree`函数,它递归地计算每个子节点的最大深度,并返回当前节点的最大深度。在这个过程中,通过`depth`函数计算节点的深度,同时更新全局变量`max`,存储当前找到的...
从文档中可以看出,这些题目覆盖了各种类型的数据结构和算法,如数组(array)、链表(linked list)、字符串(string)、哈希表(hashtable)、栈(stack)、队列(queue)、二叉树(binary tree)、图(graph)、...
这个标签可能意味着LeetCode的二叉树专题卡片内容是开源的,也就是说,可能有一个开源项目或者代码库(如“leetcode_binary_tree-master”)包含了这些题目的解决方案或者其他学习资源。开源意味着社区可以贡献、...
28. Balanced Binary Tree:判断一个二叉树是否是平衡二叉树。 29. Convert Sorted Array to Balanced Binary Search Tree:将有序数组转换成平衡的二叉搜索树。 30. Convert Sorted List to Balanced Binary Search...