二叉树预购
Binary tree preorder
本文关键字:二叉树 更新时间:2024-09-21
我的预购方法在main中不起作用,但数组elem已经正确形成(我在每一步打印时都进行了检查(。定义中使用的所有函数/方法都能正常工作。我认为问题的出现是因为";返回elem&";。有人能提出任何想法吗?这太重要了。
T* TreeNode<T>::preorder()const
{
T* elem = new T[elCount(left)+elCount(right)+1];
elem[0] = data;
TreeNode<T>* curr = left;
Stack<TreeNode<T>*> st;
if (right) {
st.push(right);
}
int i = 1;
while (curr) {
elem[i++] = curr->getData();
//std::cout << elem[i - 1];
if (curr->getRight())
st.push(curr->getRight());
curr = curr->getLeft();
if (!curr)
{
curr = st.getTop();
st.pop();
} }
return elem;
}
由于没有指定,所以很难准确地看到您要做什么,但似乎您正在尝试从二进制树中获取所有数据。这篇GFG文章对如何遍历二叉树做了非常简单的解释和分解。显然,您的节点更复杂,但总体逻辑是相同的。我会问自己preorder()
函数是否真的需要成为树节点类的一部分,以及单独的函数是否更有用。我也会考虑使用std::vector
,而不是你目前使用的carray。如果您需要固定的大小,std::array
可能也会更好地工作。
为了展示如何重写代码,你可以尝试类似的东西
std::vector<int> vect;
template<class T>
void preorder(const TreeNode<T>& node, vector<T>& elem) {
if(!node.getData()) {
return;
}
elem.push(node.getData());
if(node.getLeft()) {
preorder(node.getLeft());
}
if(node.getRight()) {
preorder(node.getRight());
}
}
这并不完美,因为我在脑海中写下了这一点,但它应该为遍历二叉树和提取所有数据提供一个简单的基础。一点点递归应该会让它变得容易得多。
相关文章:
- 从父数组测试用例构造二叉树失败
- 打印时有二叉树问题.用户输入不打印任何内容
- 试图找到二叉树的深度
- 二叉树结构平衡,使用递归时EXC_BAD_ACCESS
- 指向二叉树中新节点的指针
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- 二叉树级别顺序遍历在leetcode中
- 运行无限循环的最小二叉树问题
- 打印二叉树中的常见元素
- 二叉树基准测试结果
- 带有矢量重复值的二叉树打印出来
- 签入二叉树的函数是平衡C++
- 我有两棵二叉树.我想在不更改输入树的情况下深度复制两个二叉树的结果
- 如何计算给定数字在二叉树中出现的次数?
- 为什么我的二叉树会覆盖其根的叶子?
- 将二叉树的节点插入链表 (C++)
- 二叉树级别顺序插入 c++
- 在 C++ 中创建两个不同的二叉树时出现分段错误
- 如何在使用 ItemType 的模板类时将新节点插入二叉树 c++.(我是 c++ 的新手)