我必须从给定的输入构建一个二叉树。输入形式如下:。第一行表示接下来的数据行数(N)。。下n行表示以下形式的数据:1.第一个字符是父节点2,第二个字符是子节点3,第三个字符表示方向(l表示左子,R表示右子)。
示例输入如下:
9
1 2 R
1 3 L
2 4 R
2 5 L
3 6 R
3 7 L
5 8 R
5 9 L
7 10 R
请有人指导我如何编写构建这棵二叉树的代码。我知道这是一个很简单的问题,但能不能有人指点我,我该怎么做呢?
我构建了这样一个简单的Tree类:
class Tree:
def __init__(self,x):
self.data = x
双向链表实现了链表的惯用遍历,我想为什么二叉树不行呢?传统上,二叉树或树通常是单向的,这意味着,给定具有足够数量的节点的大树,查找叶节点的运行时间可能会很昂贵。
如果在找到这样一个节点后,为了找到下一个节点,我可以向后遍历树的根,与另一次深度优先搜索树的每个节点相比,这不是更有优势吗?我以前从未考虑过这一点,直到认识到双向链表和二叉树的结合可能会带来潜在的好处。
例如,如果我使用一个内部类
class Tree<T> {
private class TwoWayNode {
var data : T
var lef
二叉树与下面的二叉树代码相同或不相同,给出了线性复杂度,即大O (n),其中n是二叉树中节点数最少的节点数。
boolean identical(Node a, Node b)
{
if (a == null && b == null)
return true;
if (a != null && b != null)
return (a.data == b.data
&& identical(a.left, b.left)
我有树结构。
class Element {
private List<Element> children;
}
Element treeStructure = produceSomeTreeStructure();
//How to get its height and number of elements.
直进解是做两个循环.首先,我可以找到节点数。
(对非二叉树改变此算法),
和第二个循环得到树的高度
再次,将该算法应用于非二叉树.
我的问题是,如何一走了之。保持全局变量的结果对我来说是可以接受的。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not roo
我刚刚开始学习二叉树。在给定Inorder和Postorder或Inorder和Preorder的情况下,有没有一种算法来找出二叉树结构?我一直在尝试手动操作,但它从来没有出来correct.For例如-这两个是有效的顺序和后序遍历一个给定的树:
顺序:D B F E A G C L J H K后序:D F E B G L J K H C A
显然,A是根元素,因为它是Postorder中的最后一个元素。现在按顺序看,左边的子树变成:{D B F E},右边的子树变成{G C L J H K}。右子树的根将是前序中倒数第二的元素,即C。我现在可以进一步划分右子树(以C为根),给出{G}作为右子
如何在不使用递归的情况下获取二叉树的祖先节点。我有以下使用递归的代码,但不知道如何在不使用递归的情况下获取。
boolean printAncestors(Node node, int target) {
/* base cases */
if (node == null) {
return false;
}
if (node.data == target) {
return true;
}
/* If target is present in either left or right subt