实验四、2递归创建遍历二叉树

二叉树递归遍历
本文介绍了一种使用递归方法创建二叉树并进行先跟、中根及后跟遍历的方法。通过C语言实现,展示了如何根据输入字符构建二叉树,并通过递归函数实现不同类型的树遍历。

/*
  Description: 用递归方法进行二叉树的创建,先跟,中根,后跟遍历
*/

#include<stdio.h>
#include<stdlib.h>
#define null 0
typedef struct btnode//二叉树结点类型
{
 char date;
 struct btnode *lc,*rc; 
}bttree;
bttree *creattree()//创建二叉树并将而二叉树的跟结点指针返回
{
 //getchar();
 bttree *p;
 char ch;
 if((ch=getchar())=='#')//当输入不是  时创建结点p
  p=null;
 else
 {
  p=(bttree*)malloc(sizeof(bttree));
  p->date=ch;
  p->lc=creattree();
  p->rc=creattree(); 
 }
 return(p);
}
void xiangen(bttree *p)//对p指向的二叉树进行先跟遍历
{
 if(p!=null)
 {
  printf("%2c",p->date);
  xiangen(p->lc);
  xiangen(p->rc); 
 }
}
void zhonggen(bttree *p)//中根遍历
{
 if(p!=null)
 {
  zhonggen(p->lc);
  printf("%2c",p->date);
  zhonggen(p->rc);
 } 
}
void hougen(bttree *p)//后跟遍历
{
 if(p!=null)
 {
  hougen(p->lc);
  hougen(p->rc);
  printf("%2c",p->date);
 } 
}
int main()//主函数
{
 bttree *p;
 printf("请输入字符以‘#’结束:");//输入时例如创建 二叉树abc根是a,bc分别是左右子树,则输入格式是ab##c##然后回车即可
 //p=null;
 p=creattree();
 printf("先跟遍历是:/n");
 xiangen(p);
 printf("/n");
 printf("中跟遍历是:/n");
 zhonggen(p);
 printf("/n");
 printf("后跟遍历是:/n");
 hougen(p);
 printf("/n");
 system("pause");
}
 

在Python中,我们可以创建一个简单的二叉树节点类,并用递归方法实现各种遍历。这里是一个示例: ```python # 定义二叉树节点 class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right # 递归构建二叉树(例如,给定一个列表) def build_tree(values, index=0): if index < len(values): return TreeNode(values[index], build_tree(values, 2 * index + 1), build_tree(values, 2 * index + 2)) else: return None # 先序遍历(根-左-右) def preorder_traversal(root): if root is not None: print(root.val) preorder_traversal(root.left) preorder_traversal(root.right) # 中序遍历(左-根-右) def inorder_traversal(root): if root is not None: inorder_traversal(root.left) print(root.val) inorder_traversal(root.right) # 后序遍历(左-右-根) def postorder_traversal(root): if root is not None: postorder_traversal(root.left) postorder_traversal(root.right) print(root.val) # 层次遍历(广度优先搜索) from collections import deque def level_order_traversal(root): if root is None: return queue = deque([root]) while queue: node = queue.popleft() print(node.val, end=' ') if node.left: queue.append(node.left) if node.right: queue.append(node.right) # 创建一个二叉树实例并遍历 values = [1, 2, 3, 4, 5, 6] root = build_tree(values) print("Preorder:", " " .join(map(str, preorder_traversal(root)))) print("Inorder:", " " .join(map(str, inorder_traversal(root)))) print("Postorder:", " " .join(map(str, postorder_traversal(root)))) level_order_traversal(root) ``` 在这个例子中,我们首先定义了一个`TreeNode`类,然后编写了递归函数用于遍历。最后,我们创建了一个二叉树并演示了如何使用这些函数进行遍历
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值