二叉树--前序排列

本文介绍了如何使用递归和非递归两种方法实现二叉树的前序遍历。递归方法直接从根节点开始,然后遍历左子树和右子树;非递归方法利用栈来模拟递归过程,先将根节点入栈,接着处理左子树,当栈不为空或当前节点不为null时,出栈并访问节点,然后转向其右子节点。这两种方法都是数据结构和算法中常见的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前序排列:根左右,从主根开始

//递归
public static void preOrder(TreeNode root){
  if(root != null){
        Sysout.out.println(root.data + "");
        preOrder(root.lchild);
        preOrder(root.rchild);
    }
}
//前序遍历---非递归
Stack<TreeNode> stack = new Stack<>();
List<TreeNode> list = new ArrayList<>();

public List<TreeNode> preOrder(TreeNode root){
	while(root!=null || !stack.isEmpty()){
		while(root!=null){
			list.add(root);
			stack.push(root);
			root=root.left;
		}
		TreeNode node = stack.pop();
		root = node.right;
	}
	return list;
}
### PTA平台上二叉树创建题目解析 #### 完全二叉树的概念及其特性 一个二叉树,如果每一层的节点数都达到了最大值,则该二叉树被称为完美二叉树。对于深度为D且拥有N个节点的二叉树而言,当这些节点对应于相同深度下的完美二叉树按照层次顺序排列时,这样的树即被定义为完全二叉树[^1]。 #### 二叉树的构成要素与遍历方式 依据二叉树递归性质得知,任何非空状态下的二叉树均由根节点以及左右子树这三大部分组合而成。因此,在任意指定位置处可依次实施三种动作:访问当前节点;处理左侧分支;再转向右侧分支进行相应操作[^2]。 #### 构建二叉树的方法论探讨 为了能够有效地建立起一棵完整的二叉树模型,通常会采用一种称为“基于带空指针信息的先根序列”的策略来进行构建工作。具体来说就是利用一组特定编码规则所形成的字符串表达形式来描述目标对象内部各个组成部分之间的相对关系状况。例如,“8 5 1 0 6 0 2 0 0 3 4 0 0 7 0 0 0”这段字符串就代表了一个具体的实例化过程中的输入参数集合,它最终将会形成如图1(a)所示的数据结构形态;而另一个例子则是“1 2 0 3 0 4 0 0 0”,同样遵循上述原则后得到的结果便是类似于图1(b)那样的图形展示效果[^3]。 #### 实际案例分析——通过先序序列创建并遍历二叉树 考虑这样一个场景设定:“1 5 8 0 0 0 6 0 0”。这里给出了一组用于初始化某棵待构造实体所需的基础资料集。根据既定算法逻辑框架指引下完成整个流程之后即可获得预期成果物之一——具有明确拓扑特征属性的一棵树形图表。在此基础上进一步开展诸如前序、中序或是后续等多种不同类型的遍历活动便成为可能了[^4]。 ```python class TreeNode: def __init__(self, value=0, left=None, right=None): self.value = value self.left = left self.right = right def create_binary_tree(preorder_list): if not preorder_list or preorder_list[0] == '0': return None root_value = int(preorder_list.pop(0)) node = TreeNode(root_value) node.left = create_binary_tree(preorder_list) node.right = create_binary_tree(preorder_list) return node preorder_sequence = "1 5 8 0 0 0 6 0 0".split() root_node = create_binary_tree(preorder_sequence) def pre_order_traversal(node): if node is None: return [] result = [node.value] result += pre_order_traversal(node.left) result += pre_order_traversal(node.right) return result print(f"Pre-order traversal of the created binary tree: {pre_order_traversal(root_node)}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值