如果我们要在左子树中找到节点,甚至在根节点上,它会给出正确的输出,但是如果我们在右边找到任何节点,比如根->right,即节点70,它会给出错误的输出20、30、40、50、60。我知道我在哪里犯了错误,我应该如何修改代码,这样对于输入70,只有它的左子树,即,节点60是打印的。
void In(struct node *root1,struct node*root2)
{
if (root1 != NULL)
{
In(root1->left,root2);
if(root1->key==root2->key)
exit(0);
else
printf("%d ", root1->key);
In(root1->right,root2);
}
}
int main()
{
/* Let us create following BST
50
/ \
30 70
/ \ / \
20 40 60 80 */
struct node *root = NULL;
root = insert(root, 50);
insert(root, 30);
insert(root, 20);
insert(root, 40);
insert(root, 70);
insert(root, 60);
insert(root, 80);
// print inoder traversal of the BST
inorder(root);
printf("\n");
In(root,root->right);
return 0;
}
只需在左边的孩子上做一个顺序遍历。
void In( struct node *root1, struct node *root2 )
{
if ( root1 != NULL && root2 != NULL )
{
if ( root1 -> key == root2 -> key)
exit(0);
inorder( root2 -> left );
}
}
主要内容:层次遍历的实现过程,实现代码前边介绍了 二叉树的先序、中序和后序的遍历算法,运用了 栈的 数据结构,主要思想就是按照先左子树后右子树的顺序依次遍历树中各个结点。 本节介绍另外一种遍历方式:按照二叉树中的层次从左到右依次遍历每层中的结点。具体的实现思路是:通过使用 队列的数据结构,从树的根结点开始,依次将其左孩子和右孩子入队。而后每次队列中一个结点出队,都将其左孩子和右孩子入队,直到树中所有结点都出队,出队结点的先后顺序就是层
为了上课,我必须创建一个状态对象的二叉树,每个状态对象包括一个居民对象的二叉树,这些居民对象组织住在每个州的人。我试图在一个给定的州中搜索最老的居民;然而,居民是按字母顺序组织在树中的,这对我的搜索毫无帮助。因此,我必须遍历整个居民树,更新保存最老的人的节点,并在树被完全遍历后返回它。我已经有了代码的第一部分,但是还停留在如何写递归的剩余部分。 状态树的方法: 然后是公共“包装器”状态树方法:
中序遍历二叉树 按完全二叉树的层次遍历给出一棵二叉树的遍历序列(其中用0表示虚结点),要求输出该二叉树的深度及中序遍历该二叉树得到的序列。 输入格式: 首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据首先输入一个正整数n(n≤1000),代表给出的二叉树的结点总数(当然,其中可能包含虚结点)。结点编号均为正整数,且各不相同。 然后输入n个正整数,表示按完全二叉树(即第1层1
我正在研究二叉树。我在网上看到了一个遍历整个二叉树的代码。这是我得到的代码:“” “‘ 我不明白的是这个函数如何打印正确的孩子?根据代码每次调用函数时,左子被打印出来。代码永远不会到达正确的孩子。
根据带虚结点的先序序列建立二叉树,输出该二叉树的中序、后序遍历序列。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据在一行中输入一个字符串(不含空格且长度不超过80),表示二叉树的先序遍历序列,其中字符∗表示虚结点(对应的子树为空)。 输出格式: 对于每组测试,分别在两行输出所建立二叉树的中序遍历序列和后序遍历序列。 输入样例: HDAC*BGFE** 输出样例: ADCBHFEG ABC
本文向大家介绍二叉树 Z 字型遍历相关面试题,主要包含被问及二叉树 Z 字型遍历时的应答技巧和注意事项,需要的朋友参考一下 考察点:遍历