建立一个二叉树并遍历,打印输出遍历结果的代码
时间: 2024-02-15 17:05:52 浏览: 18
好的,以下是建立二叉树并遍历的示例代码(使用前序遍历):
```python
# 定义节点类
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
# 建立二叉树
def build_tree():
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
return root
# 前序遍历
def pre_order_traversal(node):
if node is not None:
print(node.value, end=' ')
pre_order_traversal(node.left)
pre_order_traversal(node.right)
# 测试代码
root = build_tree()
pre_order_traversal(root) # 输出:1 2 4 5 3 6 7
```
希望这个例子可以帮助你。
相关问题
建立一个二叉树并遍历,打印输出遍历结果的c++代码
好的,以下是建立二叉树并遍历,打印输出遍历结果的C++代码:
```c++
#include <iostream>
#include <queue> // 引入队列头文件
using namespace std;
// 定义节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 建立二叉树
TreeNode* buildTree() {
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
return root;
}
// 前序遍历
void preOrderTraversal(TreeNode* root) {
if (!root) {
return;
}
cout << root->val << " ";
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
// 中序遍历
void inOrderTraversal(TreeNode* root) {
if (!root) {
return;
}
inOrderTraversal(root->left);
cout << root->val << " ";
inOrderTraversal(root->right);
}
// 后序遍历
void postOrderTraversal(TreeNode* root) {
if (!root) {
return;
}
postOrderTraversal(root->left);
postOrderTraversal(root->right);
cout << root->val << " ";
}
// 层序遍历
void levelOrderTraversal(TreeNode* root) {
if (!root) {
return;
}
queue<TreeNode*> q; // 定义队列
q.push(root);
while (!q.empty()) {
int levelSize = q.size();
for (int i = 0; i < levelSize; i++) {
TreeNode* node = q.front();
q.pop();
cout << node->val << " ";
if (node->left) {
q.push(node->left);
}
if (node->right) {
q.push(node->right);
}
}
}
}
// 测试代码
int main() {
TreeNode* root = buildTree();
cout << "前序遍历结果:";
preOrderTraversal(root);
cout << endl;
cout << "中序遍历结果:";
inOrderTraversal(root);
cout << endl;
cout << "后序遍历结果:";
postOrderTraversal(root);
cout << endl;
cout << "层序遍历结果:";
levelOrderTraversal(root);
cout << endl;
return 0;
}
```
输出结果为:
```
前序遍历结果:1 2 4 5 3 6 7
中序遍历结果:4 2 5 1 6 3 7
后序遍历结果:4 5 2 6 7 3 1
层序遍历结果:1 2 3 4 5 6 7
```
用C语言建立一个二叉树并遍历并计算二叉树高度
好的,我知道您的要求,下面是回答您的问题:
要用C语言建立一个二叉树,我们可以定义一个结构体来表示节点,包含该节点的值、左子树和右子树指针:
```
typedef struct TreeNode {
int value;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
```
然后我们可以定义一个函数来创建二叉树,输入一个整型数组和数组长度,返回二叉树的根节点指针:
```
TreeNode* createTree(int arr[], int len) {
if (len <= 0) {
return NULL;
}
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->value = arr[0];
node->left = createTree(arr+1, len/2);
node->right = createTree(arr+(len/2)+1, len-(len/2)-1);
return node;
}
```
这里我们采用递归的方式,每次创建一个节点,将其值设为数组的第一个元素,然后将左子树设为数组前一半(如果长度为偶数,则取左边的一半),右子树设为数组后一半(如果长度为偶数,则取右边的一半)。
接下来我们可以定义一个函数来遍历二叉树。这里我们采用先序遍历,即先访问根节点,再遍历左子树,最后遍历右子树:
```
void preOrder(TreeNode *node) {
if (!node) {
return;
}
printf("%d ", node->value);
preOrder(node->left);
preOrder(node->right);
}
```
类似地,我们可以定义中序遍历和后序遍历函数。
最后,要计算二叉树的高度,可以采用递归方式计算左子树和右子树的高度,然后取较大值再加1,即为整个二叉树的高度:
```
int treeHeight(TreeNode *node) {
if (!node) {
return 0;
}
int leftHeight = treeHeight(node->left);
int rightHeight = treeHeight(node->right);
return leftHeight > rightHeight ? leftHeight+1 : rightHeight+1;
}
```
这样,我们就用C语言建立了一个二叉树并遍历并计算了二叉树高度。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)