数据结构创建二叉树的先序遍历
时间: 2023-12-13 16:32:02 浏览: 30
以下是使用先序遍历创建二叉树的示例代码:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def createTree(preorder):
if not preorder:
return None
val = preorder.pop(0)
if not val or val == '#':
return None
root = TreeNode(val)
root.left = createTree(preorder)
root.right = createTree(preorder)
return root
preorder = ['A', 'B', 'C', '#', '#', 'D', '#', '#', 'E', 'F', '#', '#', '#']
root = createTree(preorder)
```
其中,`preorder`是二叉树的先序遍历结果,`#`表示空节点。`createTree`函数通过递归的方式创建二叉树,每次从`preorder`中取出一个元素作为当前节点的值,如果该值为`None`或`#`,则返回`None`,否则创建一个新的节点,并递归创建左右子树。最后返回根节点。
相关问题
数据结构二叉树先序遍历
二叉树是一种常见的数据结构,它由节点和边组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的先序遍历是指先访问根节点,然后按照先左后右的顺序遍历左右子树。具体实现可以使用递归或者栈来实现。
以下是二叉树先序遍历的递归实现:
```
void preorderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
// 访问根节点
visit(root);
// 遍历左子树
preorderTraversal(root->left);
// 遍历右子树
preorderTraversal(root->right);
}
```
其中,`visit`函数表示访问节点的操作,可以根据具体需求进行定义。
以下是二叉树先序遍历的非递归实现:
```
void preorderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* node = s.top();
s.pop();
// 访问节点
visit(node);
// 先将右子节点入栈
if (node->right != nullptr) {
s.push(node->right);
}
// 再将左子节点入栈
if (node->left != nullptr) {
s.push(node->left);
}
}
}
```
以上就是二叉树先序遍历的介绍和实现。如果您有其他问题,可以继续提出。
数据结构二叉树先序中序后序遍历递归
二叉树的先序、中序和后序遍历是通过递归实现的。先序遍历指的是先访问根节点,然后依次对左子树和右子树进行先序遍历;中序遍历指的是先对左子树进行中序遍历,然后访问根节点,最后对右子树进行中序遍历;后序遍历指的是先对左子树进行后序遍历,然后对右子树进行后序遍历,最后访问根节点。
递归实现先序遍历的代码如下:
```
void preOrderTraversal(TreeNode *root) {
if (root == nullptr) {
return;
}
cout << root->val << " "; // 访问根节点
preOrderTraversal(root->left); // 先序遍历左子树
preOrderTraversal(root->right); // 先序遍历右子树
}
```
递归实现中序遍历的代码如下:
```
void inOrderTraversal(TreeNode *root) {
if (root == nullptr) {
return;
}
inOrderTraversal(root->left); // 中序遍历左子树
cout << root->val << " "; // 访问根节点
inOrderTraversal(root->right); // 中序遍历右子树
}
```
递归实现后序遍历的代码如下:
```
void postOrderTraversal(TreeNode *root) {
if (root == nullptr) {
return;
}
postOrderTraversal(root->left); // 后序遍历左子树
postOrderTraversal(root->right); // 后序遍历右子树
cout << root->val << " "; // 访问根节点
}
```