有人可以使用C指导我使用树数据结构的一些教程.我尝试使用谷歌搜索,但大多数实现都是针对C++或Java.如果有人能指出我在C中的一些在线教程,那将是很棒的.
谢谢..
如何将二叉树就地转换为二叉搜索树,即我们不能使用任何额外的空间.
algorithm tree binary-tree binary-search-tree data-structures
对于给定的二叉树,找到最大的子树,它也是二叉搜索树?
例:
输入:
10
/ \
50 150
/ \ / \
25 75 200 20
/ \ / \ / \ / \
15 35 65 30 120 135 155 250
Run Code Online (Sandbox Code Playgroud)
输出:
50
/ \
25 75
/ \ /
15 35 65
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个具有附加要求的优先级队列,一个查找/搜索功能,它将告诉一个项目是否在队列中的任何位置.所以函数将是:insert,del-min和find.
我不确定是否应该使用Heap或Self-balancing二进制搜索树.看来PQ通常用Heap实现,但我想知道使用二叉搜索树是否有任何优势,因为我还需要find函数.
此外,平均而言,我会做更多的插入而不是删除.我也在考虑一个d-ary堆.基本上,每一秒都很重要.
谢谢!
这是一个受欢迎的访谈问题,我可以在这个主题上找到的唯一一篇文章来自TopCoder.对我来说不幸的是,从面试答案的角度看,它看起来过于复杂.
除了绘制两个节点的路径并推断祖先之外,是否有更简单的方法可以做到这一点?(这是一个很受欢迎的答案,但是面试问题的变化需要一个恒定的空间答案).
我正在考虑将二进制树展平为列表,以便进行后续处理.
我首先考虑使用(++)加入左右分支,但后来想到了更糟糕的情况需要O(n^2)时间.
然后我考虑向后构建列表,使用(:)在线性时间附加到前面.然而,我想如果我将这个列表发送到类似折叠的函数,它必须等到整个树遍历才能开始折叠,因此不能使用列表融合.
然后我想出了以下内容:
data Tree a = Node a (Tree a) (Tree a) | Tip
flatten :: Tree a -> [a]
flatten x = (flatten' x) []
flatten' :: Tree a -> [a] -> [a]
flatten' (Node x left right) l = (flatten' left (x:(flatten' right l)))
flatten' Tip l = l
main =
putStrLn $ show $ flatten $
(Node 2 (Node 1 Tip Tip) (Node 4 (Node …Run Code Online (Sandbox Code Playgroud) 我知道有一些方法可以从预先遍序遍历(作为数组)构造树.考虑到有序和预订遍历,更常见的问题是构造它.在这种情况下,虽然顺序遍历是多余的,但它确实使事情变得更容易.任何人都可以告诉我如何进行后期遍历?迭代和递归解决方案都是必需的.
我尝试使用堆栈迭代地执行它,但根本无法正确地获得逻辑,因此得到了一个可怕的凌乱的树.同样去递归.
问题陈述
您将获得指向二叉树根的指针.打印二叉树的顶视图.您只需要完成该功能.
我的代码:
void top_view(Node root)
{
Node r = root;
if(r.left!=null){
top_view(r.left);
System.out.print(r.data + " ");
}
if(r.right!=null){
System.out.print(r.data + " ");
top_view(r.right);
}
}
Run Code Online (Sandbox Code Playgroud)
每次调用函数时都会执行两个if语句,但我只需要执行其中一个.我尝试过切换但是它给出了常量表达式错误.我已经为这个问题找到了不同的解决方案.
所以我只想知道如果一次执行我们是否只能制作一个,即有没有办法在不改变方法的情况下修复我的代码?

GeeksforGeeks 网站提出了二叉树最大路径和问题的解决方案。问题如下:
给定一棵二叉树,求最大路径和。路径可以在树中的任何节点开始和结束。
解决方案的核心如下:
int findMaxUtil(Node node, Res res)
{
if (node == null)
return 0;
// l and r store maximum path sum going through left and
// right child of root respectively
int l = findMaxUtil(node.left, res);
int r = findMaxUtil(node.right, res);
// Max path for parent call of root. This path must
// include at-most one child of root
int max_single = Math.max(Math.max(l, r) + node.data,
node.data);
// Max Top represents the sum when the …Run Code Online (Sandbox Code Playgroud) 我正在寻找一些用于商业/自由软件项目,现代或旧的树结构的例子.我可以在维基百科上看到示例,但我正在寻找更具体的示例以及如何使用它们.例如,数据库中的主键是(从我读过的)存储在BST结构中或BST的变体(随意纠正我)
我的问题不仅限于二进制搜索树(BST),它可以包括任何变体,如红黑,AVL等.