用顺序存储结构来存储一颗具有n个结点的二叉树,编写算法实现对该二叉树进行先序遍历,输出先序遍历序列。
时间: 2024-05-04 14:20:03 浏览: 78
假设二叉树的结点结构体如下定义:
```C++
struct TreeNode {
char val; // 二叉树结点的值
int left; // 左子树的下标
int right; // 右子树的下标
};
```
其中下标从0开始,-1表示空节点。
下面是基于顺序存储结构的二叉树先序遍历算法:
```C++
void preOrderTraversal(vector<TreeNode>& tree, int root) {
if (root == -1) return; // 空节点,直接返回
cout << tree[root].val; // 先输出根节点的值
preOrderTraversal(tree, tree[root].left); // 递归遍历左子树
preOrderTraversal(tree, tree[root].right); // 递归遍历右子树
}
```
其中`tree`表示存储二叉树的数组,`root`表示当前子树的根节点下标。
具体的实现过程就是先输出根节点的值,然后递归遍历它的左子树和右子树。递归的终止条件就是当前结点是空节点,即下标为-1。
我们可以在主函数中先构建一颗二叉树,然后调用上述算法进行先序遍历:
```C++
int main() {
vector<TreeNode> tree = {
{'A', 1, 2}, // 根节点
{'B', 3, 4}, // 左子树
{'C', 5, -1}, // 右子树
{'D', -1, -1}, // 左子树的左子树
{'E', -1, -1}, // 左子树的右子树
{'F', -1, -1} // 右子树的左子树
};
cout << "先序遍历结果为:";
preOrderTraversal(tree, 0); // 从根节点开始遍历
cout << endl;
return 0;
}
```
输出结果为:
```
先序遍历结果为:ABDECF
```
阅读全文