递归函数是如何对二叉树进行操作的
How do recursive functions do operations on a binary tree?
我不太理解这个概念。
void preorderPrint( TreeNode *root ) {
if ( root != NULL ) { // (Otherwise, there's nothing to print.)
cout << root->item << " "; // Print the root item.
preorderPrint( root->left ); // Print items in left subtree.
preorderPrint( root->right ); // Print items in right subtree.
}
}
如何打印出二叉树中的节点?它似乎只是遍历树,除了根项之外不输出任何内容。
此外,在我看来,与二叉树一起工作的递归函数只是在一条直线上遍历树。也就是说,root->left只是沿着最左边节点的路径,忽略左边子树中最右边的节点。这是如何一步步进行的呢?
您忽略了一个事实,即当一个函数调用另一个函数并且内部函数返回时,另一个函数从它离开的地方恢复。
考虑一个有根节点和左节点的树。发生以下情况:
-
我们在根节点上调用preorderPrint
-
输出根节点的内容
-
调用左节点的preorderPrint
-
输出左节点的内容。它在NULL时调用preorderPrint两次,它不做任何事情,并返回。
-
恢复对preorderPrint的原始调用,调用根节点右指针的
preorderPrint
,该指针为NULL,并且不做任何事情。
相关文章:
- 从父数组测试用例构造二叉树失败
- 打印时有二叉树问题.用户输入不打印任何内容
- 试图找到二叉树的深度
- 二叉树结构平衡,使用递归时EXC_BAD_ACCESS
- 指向二叉树中新节点的指针
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- 二叉树级别顺序遍历在leetcode中
- 运行无限循环的最小二叉树问题
- 打印二叉树中的常见元素
- 二叉树基准测试结果
- 带有矢量重复值的二叉树打印出来
- 签入二叉树的函数是平衡C++
- 我有两棵二叉树.我想在不更改输入树的情况下深度复制两个二叉树的结果
- 如何计算给定数字在二叉树中出现的次数?
- 为什么我的二叉树会覆盖其根的叶子?
- 将二叉树的节点插入链表 (C++)
- 二叉树访谈:实现跟随操作
- 一些基于二叉树的操作
- 递归函数是如何对二叉树进行操作的