【发布时间】:2013-11-19 05:52:04
【问题描述】:
我正在尝试为二叉搜索树制作 c++ 程序,该程序将包含以下功能(实际上这是我大学作业的一部分):
A) 创建二叉搜索树。
B) 中序、前序、后序遍历。 (非递归)
C) 在树中搜索 Val。
D) 广度优先遍历。
E) 深度优先遍历
F) 计算叶节点、非叶节点。
G) 计数。级别
我的疑问是:-
1.通常一个树节点有如下结构:
class node{
private:
node *lChild;
int info;
node *rChild;
}
所以如果我想执行深度优先或广度优先遍历,我可以更改节点结构并添加一个指向父节点的指针,以便我可以轻松地在层次结构中向后移动
class node{
private:
node *parent //pointer to parent node
node *lChild;
int info;
node *rChild;
}
这被认为是编程二叉树的正常做法还是不好的形式?如果它不被认为是编程树的好方法,还有其他方法还是我必须使用使用堆栈(用于深度优先)和队列(用于广度优先)的书中给出的方法来存储节点(访问过或相应地未访问)
2.这是我第一次学习数据结构,所以如果有人能用简单的语言解释二叉树递归和非递归遍历之间的区别,那将是一个很大的帮助考虑中
【问题讨论】:
-
你知道递归函数吗? IE。调用自己的函数?
-
@Nick 是的,我知道递归的概念
-
酷。所以你只需要从根开始递归遍历树。 IE。为每个孩子(然后每个孩子......每个孩子)调用您的函数。所需的遍历取决于您 a)处理每个节点和 b)处理每个孩子的顺序。
标签: c++ algorithm data-structures recursion binary-search-tree