打印二叉树节点
Print binary tree nodes
我正在编程一个BinaryTree项目。我完成了所有(插入、删除、创建、查找),只有一个功能,即打印操作。我应该这样打印:
5
46
X557
XXX6XXX9
基本上打印所有节点,但如果节点为空,则打印X。我一直在想办法做到这一点,但我一直走到了死胡同。这会是一种无序遍历吗??感谢
在遍历一个级别时,使用级别顺序遍历(广度优先搜索)打印每个节点,在每个级别的末尾都有一行换行符。
你可以在这里找到BFS伪代码
您可以使用BFS,但需要稍作修改:
在简单的BFS中,访问一个节点后,将其子节点添加到队列中。如果没有孩子,则不添加任何内容。
对于您的问题,如果访问的节点没有子节点,请将一个特殊节点添加到队列中,其值为"x",这样它将相应地在输出中打印"x"。在每个级别后打印一行换行符。
正如Dream Lane所说,BFS将在这里工作。我在这里提供了我自己的JAVA实现供您参考。
public static void printBST(Node root) {
// empty tree
if (root == null)
return;
Queue<Node> que = new LinkedList<Node>();
que.add(root);
boolean allChildNull = false;// end condition
while (que.size() > 0 && !allChildNull) {
allChildNull = true;
Queue<Node> childQue = new LinkedList<Node>();
for (Node n : que) {
// print out noe value, X for null
if (n == null)
System.out.printf("%1$s", "X");
else
System.out.printf("%1$s", n.value);
// add next level child nodes
if (n == null) {
childQue.add(null);
childQue.add(null);
} else {
childQue.add(n.left);
childQue.add(n.right);
if (n.left != null || n.right != null)
allChildNull = false;
}
}
System.out.printf("n");// newline
que = childQue;
}
}
相关文章:
- 指向二叉树中新节点的指针
- 没有从"树节点"到"树节点*"的可行转换
- 如何有效地修剪和合并四叉树中的节点?
- 将二叉树的节点插入链表 (C++)
- 如何在使用 ItemType 的模板类时将新节点插入二叉树 c++.(我是 c++ 的新手)
- 语言分析的二叉树实现 - 子节点:不起作用
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- 重载运算符>>从二叉树中删除节点
- 打印具有空节点的二叉树
- 二叉树,从树中删除节点后将其删除
- 二叉树不接受新节点
- 连接二叉树中同一级别的节点
- 查找二叉树的父节点函数
- 程序设置二叉树,打印和搜索 - 节点类C++
- 查找二叉树中特定节点的深度
- 是否计算二叉树中具有特定子级数量的节点
- C++二叉树,修改根节点,指针到指针到根节点
- 二叉搜索 删除目标节点的树有两个子节点
- 创建一个函数,该函数返回一个新的相同二叉树,并向所有预先存在的叶添加新节点
- 如何将四叉树/八叉树用于块世界