首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何返回按顺序遍历指定子树(指定节点的左子树或右子树)的数组

返回按顺序遍历指定子树的数组,可以通过递归遍历实现。具体步骤如下:

  1. 创建一个空数组,用于存储遍历结果。
  2. 判断指定子树是否为空,如果为空则返回空数组。
  3. 递归遍历指定子树的左子树,将遍历结果追加到数组中。
  4. 将指定子树的根节点的值追加到数组中。
  5. 递归遍历指定子树的右子树,将遍历结果追加到数组中。
  6. 返回数组作为遍历结果。

这样,返回的数组就是按顺序遍历指定子树的结果。

以下是一个示例代码,以二叉树为例:

代码语言:txt
复制
# 定义二叉树节点类
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

# 返回按顺序遍历指定子树的数组
def traverse_subtree(root, subtree):
    if root is None:
        return []
    
    if subtree == "left":
        return traverse_subtree(root.left, subtree) + [root.val] + traverse_subtree(root.right, subtree)
    elif subtree == "right":
        return traverse_subtree(root.left, subtree) + traverse_subtree(root.right, subtree) + [root.val]
    else:
        return []

# 创建二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)

# 遍历左子树
left_subtree = traverse_subtree(root, "left")
print(left_subtree)  # 输出: [4, 2, 5, 1, 6, 3, 7]

# 遍历右子树
right_subtree = traverse_subtree(root, "right")
print(right_subtree)  # 输出: [2, 4, 5, 6, 7, 3, 1]

在腾讯云的产品中,可以使用云函数 SCF(Serverless Cloud Function)来实现类似的功能。云函数是一种无服务器计算服务,可以在云端运行代码,无需关心服务器的运维和扩展。您可以编写一个云函数,使用递归遍历的方式返回按顺序遍历指定子树的数组。具体使用方法请参考腾讯云函数的官方文档:腾讯云函数

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

疯狂java笔记之树和二叉树

指定节点添加子节点 判断二叉树是否为空 返回节点 返回指定节点(非根节点)节点 返回指定节点(非叶子节点)节点 返回指定节点(非叶子节点)节点 返回该二叉树深度 返回指定节点位置...先(前)序遍历二叉树 中序遍历二叉树 后序遍历二叉树 如果L,D,W表示子树、根、子树,习惯上总是必须先遍历子树,后遍历子树,根据遍历节点顺序不同,上面三种算法可表示如下。...先序遍历 先序遍历指先处理根节点,其处理顺序如下: (1) 访问根节点 (2) 递归遍历子树 (3) 递归遍历子树 中序遍历 中序遍历指其次处理根节点.其处理顺序如下。...(1) 递归遍历子树 (2) 递归遍历子树 (3) 访问根节点 广度优先(层)遍历 广度优先遍历又称为遍历,整个遍历算法是先遍历几叉树第一层(根节点),再遍历节点两个子’节点(第二层...被删除转点p只有子树只有子树,如果p是它节点节点,则将p子树子树添加成p一节点节点节点即可;如果p是它节点节点,则将p子树子树添加成P节点节点节点即可

1.2K20

数据结构图文解析之:AVL树详解及C++模板实现

删除节点也可能导致AVL树失衡,实际上删除节点和插入节点是一种互逆操作: 删除子树节点导致AVL树失衡时,相当于在子树插入节点导致AVL树失衡,即情况情况二情况四。...,如果节点同时拥有子树子树,则在高度教低子树上选择最大(最小)元素进行替换,这样能保证替换后不会再出现失衡现象。...二叉树遍历,如果区分左右孩顺序,共有三种遍历方式: 先序遍历称前序遍历 中序遍历,对二叉排序树来说,中序遍历刚好输出一个非递减序列(假设我们对元素访问操作是”输出“) 后序遍历 遍历操作可以对二叉树节点进行访问...,否则先访问根节点,然后前序遍历子树,再前序遍历子树。...,否则从根节点开始,中序遍历节点子树,然后访问根节点,最后中序遍历子树

7.6K62
  • 【算法】重建二叉树并进行后序遍历Java实现

    本文将详细介绍如何通过Java实现这一过程。 问题描述 前序遍历(Preorder):节点 -> 子树 -> 子树顺序访问节点。...中序遍历(Inorder):子树 -> 根节点 -> 子树顺序访问节点。 后序遍历(Postorder):子树 -> 子树 -> 根节点顺序访问节点。...在中序遍历中找到该根节点位置,可以将中序遍历数组分为子树子树两部分。递归地对这两部分继续构建左右子树。 2....后序遍历 在构建好二叉树上进行后序遍历子树 -> 子树 -> 根节点顺序输出节点值。...:通过递归方法进行后序遍历,按照子树 -> 子树 -> 根节点顺序输出节点值。

    11310

    【数据结构】什么是二叉树?

    先来看看完全二叉树顺序存储,一颗完全二叉树如下图: 将这颗二叉树存到数组中,相应下标对应其同样位置: 但如果遇到树中不存在结点,我们也可在顺序结构中存入"^"空,来表示该结点不存在...前序遍历 前序遍历规则是:若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历子树,再前序遍历子树....如下图所示,遍历顺序为:ABDGHCEIF 中序遍历 中序遍历规则是:若二叉树为空,则空操作返回,否则从根节点开始(注意不是先访问根节点)先中序遍历节点子树,然后访问根节点...如下图所示,遍历顺序为:GDHBAEICF 后序遍历 后序遍历规则是:若二叉树为空,则空操作返回,否则从左到右先叶子后结点方式遍历访问左右子树,最后是访问根节点....如下图所示,遍历顺序为:GHDBIEFCA 层序遍历 层序遍历规则是:若二叉树为空,则空操作返回,否则从树第一层,也就是根节点开始访问,从上而下逐层遍历,在同一层中,从左到右顺序对结点逐个访问

    7810

    PAT 1020 Tree Traversals (25分) 解读

    第二步,观察中序遍历ADEFGHMZ。其中root节点G左侧ADEF必然是root子树,G右侧HMZ必然是root子树。...第三步,根据后序遍历(左右中)特点,后序遍历中,根G左边节点M必然是它子树HMZ根。 第四步,子树HMZ有三个节点,根G往左移三个位置后D必然是它子树根。...第五步,观察发现,上面的过程是递归。先找到当前树节点,然后划分为子树子树,然后进入子树重复上面的过程,然后进入子树重复上面的过程。最后就可以还原一棵树了。...该步递归过程可以简洁表达如下: 1 确定根,确定子树,确定子树。 2 在子树中递归。 3 在子树中递归。 4 返回或者打印当前根。...会自动顺序排序,相当于保证了访问先后顺序,这样我们最后直接输出map即可 /** * in_start 当前子树中序遍历序列在 inorder数组起始位置 * in_end 当前子树中序遍历序列在

    49430

    二叉树经典OJ题(2)

    . - 力扣(LeetCode) class Solution { public: //前序遍历:根 //子树为空,子树不为空时候,不能省略 //不为空,子树为空时候,可以省略...0;//帮助我们顺序遍历前序数组 return _buildTree(preorder,inorder,pi,0,inorder.size()-1); } }; 五、中序和后序序列遍历构建二叉树...子树子树 //1 左路节点 //2 子树右路节点 //从栈里取到左路节点,意味着左路节点,以为着这个节点子树已经访问完了。...然后按照 根、子树子树顺序去访问(和后序相反),最后再逆置我们返回数组即可。...这是一种取巧方法,但是能成功是因为该题是将结果放到一个数组返回,如果该题是要求我们边遍历边访问,比如打印,那么该方法就不可行。

    5910

    【C++&数据结构】二叉树(结合C++)经典oj例题 (24)

    子树不为空,直接进——>打印子树括号+节点 3.子树不为空,直接进——>打印子树括号+节点 (PS:由于加上了条件限制:左右均为空时,递归函数直接返回,不会打印空括号) 最终代码如下图所示.../ 2)题目逐过程分析 公共祖先特征:一个节点在我子树,一个节点在我子树,则我就是公共祖先 因此我们需要利用到【查找】功能(前序遍历:根—>子树—>子树) 接下来我们进一步进行程序设计...分别为节点还是在返回值;利用下图所示简单逻辑判断,快速得到返回值 开始进行递归判断;两个节点,同时在时,则继续往左走;同时在时,继续往右走;直到一,递归结束; 3)题目完整代码...(子树->根->子树) 时,返回节点顺序是 从小到大 解题思路分析: 核心:如果我们能够通过 中序遍历 该二叉搜索树,并且将返回节点顺序存入vector中,最后再将相邻元素两两连接,则也可以实现双向链表...根据第2步找到rooti, 划分左右区间 ,在子树子树中进行递归操作 3)题目完整代码 4)对比同类型题目:“根据一棵树中序遍历与后序遍历构造二叉树” 后序遍历和前序遍历不同点在于,其访问根先后顺序完全颠倒

    17910

    数据结构与算法--使用Java实现二叉树

    将二叉树中编号为i结点存放到数组第i个分量中 我们得到: 结点i父结点: i / 2  结点i孩子: 2i, 结点i孩子: 2i + 1 这种存储方式对满二叉树和完全二叉树来说: 1....: 根, 子树, 子树 如果规定先遍历子树,再遍历子树....根据根遍历顺序我们会得到三种遍历方式 先序遍历(DLR): 根 子树 子树 后序遍历(LRD): 子树  子树 根 中序遍历:(LDR) : 子树子树 以图1-1为例:  我们得到...= root;     } 2.3.1 获取二叉树结点数量  对于二叉树,是没有size这个属性来直接返回结点数量给我们 二叉树包括: 子树,子树,根 所以它结点数量为 + + 1 通过递归来实现...个人认为这是二叉树里最重要内容:  2.3.5 前序遍历(递归)  遍历顺序 : 根, 子树, 子树 思想: 打印根值, 然后递归遍历子树(最终每个结点都可以看做根–>打印输出,遍历子树)

    1K20

    讲透学烂二叉树(三):二叉树遍历图解算法步骤及JS代码

    二叉树遍历分为 深度优先遍历 先序遍历:根节点->子树->子树(根左右),有的叫:前序遍历 中序遍历子树->根节点->子树) 后序遍历子树->子树->根节点(左右根) 广度优先遍历...一遍是从它节点时候, 一遍是从它孩子返回时, 一遍是从它孩子返回时。 其实我们在用递归算法实现二叉树遍历时候,不管是先序中序还是后序,程序都是按照上面那个顺序跑遍所有结点。...但是知道前序、中序、后序中中序和前序后序数组两种也可以还原二叉树,为何可以推出二叉树数据结构。...同时,这个也分别是子树子树中序遍历序列; 在前序遍历遍历完根节点后,接着执行前序遍历子树,注意,是前序遍历,什么意思?...到这里,我们可以得到这棵树根结点和子树结构了,如下图一 接着看子树,在第2步时候已经知道子树是FCH这三个节点,那么先看前序遍历序列,先出现是C,那么C就是子树根结点,看子树中序遍历

    86711

    【剑指Offer】1-10题

    1 二维数组查找 1.1 题目描述 在一个二维数组中(每个一维数组长度相同),每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序。...news+="%20" else: news+=c return news 3 从尾到头打印链表 3.1 题目描述 输入一个链表,链表值从尾到头顺序返回一个...假设输入前序遍历和中序遍历结果中都不含重复数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。...4.2 解题思路 首先我们先回顾下前中后三种遍历顺序: 前序遍历:根结点 ---> 子树 ---> 子树 中序遍历子树---> 根结点 ---> 子树 后序遍历子树 ---> 子树 --...-> 根结点 然后发现前序第一个节点肯定为根节点,在中序遍历中,在根节点左边子树中序遍历,在根节点右边子树中序遍历;那么在子树节点中,我们可以在前序遍历中找到子树节点子树同理

    62420

    重温数据结构:二叉树常见方法及三种遍历方式 Java 实现

    由于我们使用左右子树表示节点,不含有父亲节点引用,因此有时候可能也需要一个方法,返回二叉树中,指定节点父亲节点。...需要从顶向下遍历各个子树,若该子树节点孩子就是目标节点返回节点,否则递归遍历左右子树: /** * 获得指定节点父亲节点 * @param node * @return */ public...= null) { //子树节点就是指定节点返回 return parent; } else { return getParent(subTree.getRightChild...根据不同场景中,根节点、左右子树遍历顺序,二叉树遍历分为三种: 先序遍历 中序遍历 后序遍历 这里先序、中序、后序指的是 根节点相对左右子树遍历顺序。...遍历顺序: 先中序遍历子树 再访问根节点 再中序遍历子树 退出 代码: /** * 中序遍历 * @param node */ public void iterateMediumOrder(

    97670

    数据结构图文解析之:树简介及二叉排序树C++模板实现.

    提供其他接口都有相应备注说明。 3.3 插入新节点 假设我们要为数组 a[] = {10 , 5 , 15 , 6 , 4 , 16 }构建一个二叉排序树,我们顺序逐个插入元素。 ?...平衡二叉树是有序树,严格区分子树子树,如果规定子树先于子树次序,我们有三种方式遍历二叉树: 前序遍历 中序遍历 后序遍历 我们以如图两棵二叉排序树进行遍历算法演示。 ?...前序遍历 若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历子树,再前序遍历子树。...a:10 5 4 3 6 15 16 前序遍历树b:5 3 2 4 8 7 9 中序遍历 若二叉树为空,则空操作返回,否则从根节点开始,中序遍历节点子树,然后访问根节点,最后中序遍历子树。...后序遍历 若树为空,则返回空操作,否则从左到右先叶子后节点方式遍历访问左右子树,左右子树都访问结束,才访问根节点

    79340

    树结构之二叉树

    对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(一定顺序)会整体移动,效率较低 ?...); } } 总结 前序遍历: 先输出父节点,再遍历子树子树->父左右 中序遍历: 先遍历子树,再输出父节点,再遍历子树-> 后序遍历: 先遍历子树,再遍历子树,最后输出父节点...->左右父 小结: 看输出父节点顺序,就确定是前序,中序还是后序 二叉树应用二——二叉树查找 二叉树-查找指定节点 请编写前序查找,中序查找和后序查找方法。...二叉树应用四——二叉树顺序存储 顺序存储二叉树概念 从数据存储来看,数组存储方式和树 存储方式可以相互转换,即数组可 以转换成树,树也可以转换成数组, 见如下示意图 ?...顺序存储二叉树特点(结合上图): 顺序二叉树通常只考虑完全二叉树 第n个元素节点为 2 * n + 1 , n为该元素在数组顺序存储时下标 第n个元素节点为 2 * n +

    47030

    二叉树

    二叉树 定义 二叉树是每个节点最多有两个子树树结构。它有五种基本形态:二叉树可以是空集;根可以有空子树子树;或者子树皆为空。...前序遍历 访问顺序: 先访问父结点,再前序遍历子树,最后再前面序遍历子树,即是: 父节点 子树子树 图中遍历结果是: 从根节点开始,访问1 访问2,此时2作为父节点,访问子树...; C子树存在,找到D,由于D是叶子节点,无子树,记录D,无子树返回C,根据【遍历规则,记录C,遍历C子树; C子树不存在,返回B,B子树遍历完,返回A; 至此,A...子树遍历完毕,根据【遍历规则,记录A,遍历A子树; A子树存在,找到E,此时E看做根节点遍历E子树; E子树不存在,返回E,根据【遍历规则,记录E,遍历E子树...当成根节点,访问子树,没有,访问子树6,把6当成根节点,发现左右子树都不存在,输出6 返回节点3,发现没有子树,并且节点6已经输出了,因此输出3 返回节点1,输出1 最终顺序为:4,8,7,5,6,3,1

    45540

    《剑指 Offer(第 2 版)》树部分JavaScript题解

    [ 根节点, [子树前序遍历结果], [子树前序遍历结果] ]即根节点总是前序遍历第一个节点。...而中序遍历形式总是 [ [子树中序遍历结果], 根节点, [子树中序遍历结果] ]只要我们在中序遍历中定位到根节点,那么我们就可以分别知道子树子树节点数目。...这样以来,我们就知道了子树前序遍历和中序遍历结果,以及子树前序遍历和中序遍历结果,我们就可以递归地对构造出子树子树,再将这两颗子树接到根节点左右位置。...:」 若节点 p 在节点 root 子树中, p = root,则称 root 是 p 祖先。...在 root 子树中; q = root,且 p 在 root 子树中; 本题给定了两个重要条件:① 树为 二叉搜索树 ,② 树所有节点值都是 唯一

    39130

    精读《算法 - 二叉树》

    所谓前中后,就是访问节点值在什么时机,其余时机先左后访问子节点。比如前序遍历,就是先访问值,再访问左右;后续遍历就是先访问左右,再访问值;中序遍历就是,值,。...前序遍历第一个访问一定是根节点,因此 3 一定是根节点,然后我们在中序遍历找到 3,这样 左边就是所有子树中序遍历结果,右边就是所有子树中序遍历结果,我们只要再找到 子树前序遍历结果与子树前序遍历结果...,就可以递归了,终止条件是子树只有一个值,那样就代表叶子节点。...这道题要求从左到右顺序打印,完全遵循广度优先遍历,我们可以在二叉树递归时,先不要急着读取值,而是按照、中、,遇到左右子树节点,就推入栈末尾,利用 while 语句不断循环,直到栈空为止。...二叉树视图 二叉树视图是一道中等题,题目如下: 给定一棵二叉树,想象自己站在它右侧,按照从顶部到底部顺序返回从右侧所能看到节点值。

    29310

    数据结构笔记(二)

    二叉树特定 每个节点最多有两棵子树,所以二叉树中不存在度大于2节点子树子树是有顺序,次序不能任意颠倒。 即使树种某节点只有一棵子树,也有区分它是子树还是子树。...特殊二叉树 斜树 所有的节点都只有子树二叉树叫斜树。所有节点都是只有子树二叉树叫斜树。...二叉树遍历方法 前序遍历 规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历子树,再前序遍历子树。...中序遍历 规则是若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点子树,然后是访问根结点,最后中序遍历子树。...层序遍历 规则是若树为空,则空操作返回,否则从树第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,从左到右顺序对结点逐个访问。

    29430

    二叉树(入门级)

    /后序/层序  ▶前序遍历,又称先序遍历遍历顺序为根->子树->子树。  ...我们可以通过代码来分析一下遍历过程:首先是进入函数,第一个根节点不为空,就先从子树开始遍历子树遍历完就到子树,通过每一次递归调用。...▶中序遍历:中序遍历顺序子树->根->子树。这里递归思路和过程与上图类似。就不展示出来了。  ▶后序遍历顺序子树->子树->根。...▶层次遍历:层次遍历一层一层顺序遍历节点,因此我们这里使用队列来辅助树,实现层次遍历。先将根节点放入队列中,然后进行出队处理,每出一个节点,就将这个节点左右孩子入队。  ...解题思路:将每一个节点与其孩子节点值进行比较,如果相同,则往下走,先走子树,然后再走子树,分而治之。如果不相同,则马上返回false。 代码如下: 5.2 相同树 100.

    35800

    二叉树链式结构实现(二叉树遍历以及各种常用功能函数实现)

    二叉树遍历有:前序/中序/后序递归结构遍历和层序遍历 前序遍历(Preorder Traversal):先访问根节点,再访问子树,最后访问子树(根>>) 中序遍历(Inorder Traversal...):先访问子树,再访问根节点,最后访问子树>根>) 后序遍历(Postorder Traversal):先访问子树,再访问子树,最后访问根节点>>根) 层序遍历是一种层级顺序逐层遍历树结构方法...它从树节点开始,逐层向下遍历,按照从左到右顺序访问每一层节点 2.1前序遍历 先访问根节点,再访问子树,最后访问子树(根>>);每进入一个新节点(先访问自身) 按照此规则之前构建二叉树访问结果...printf("%p\n", TreeFind(root, 5)); return 0; } 返回地址,说明找到了 4.二叉树构建及销毁 4.1通过前序遍历数组构建二叉树 通过前序遍历数组"...root->right=CreateTreeTrue(arr, pi);//创建树 return root; } 严格按照根> 子树> 子树顺序,每一个子树又是作为一个根,有自己子树子树

    9710
    领券