实验五 前序中序后序遍历输出结点信息(链式)

#include<iostream.h>
struct BiNode
{
char data;
BiNode *lchild,*rchild;
};


class BiTree
{
public:
BiTree(){root=Create(root);}
~BiTree(){Release(root);}
void Preorder(){Preorder(root);}
void Inorder(){Inorder(root);}
void Postorder(){Postorder(root);}
private:
BiNode *root;
BiNode *Create(BiNode *bt);
void Release(BiNode *bt);
void Preorder(BiNode *bt);
void Inorder(BiNode *bt);
void Postorder(BiNode *bt);
};


BiNode *BiTree::Create(BiNode *bt)
{
char ch;
cin>>ch;
if(ch=='#')return NULL;
else {
bt=new BiNode;
bt->data=ch;
bt->lchild=Create(bt->lchild);
bt->rchild=Create(bt->rchild);
}
return bt;
}


void BiTree::Release(BiNode *bt)
{
if(bt!=NULL)
{
Release(bt->lchild);
Release(bt->rchild);
delete bt;
}
}


void BiTree::Preorder(BiNode *bt)
{
if(bt==NULL)return;
else
{
cout<<bt->data<<" ";
Preorder(bt->lchild);
Preorder(bt->rchild);
}
}


void BiTree::Inorder(BiNode *bt)
{
if(bt==NULL)return;
else
{
Inorder(bt->lchild);
cout<<bt->data<<" ";
Inorder(bt->rchild);
}
}


void BiTree::Postorder(BiNode *bt)
{
if(bt==NULL)return;
else
{
Postorder(bt->lchild);
Postorder(bt->rchild);
cout<<bt->data<<" ";
}
}


int main()
{
cout<<endl;
cout<<"*******请输入创建一棵二叉树的结点数据(链式)**********"<<endl<<endl;
BiTree T;
cout<<endl;
cout<<"**********前序遍历*********"<<endl;
T.Preorder();
cout<<endl;
cout<<"**********中序遍历*********"<<endl;
T.Inorder();
cout<<endl;
cout<<"**********后序遍历***********"<<endl;
T.Postorder();
cout<<endl;
return 0;

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我这里选取一个简单的二叉树作为例子,树结点类型为整数,树的结构如下: ``` 4 / \ 2 6 / \ / \ 1 3 5 7 ``` 我们可以用链式存储结构方法存储实现树的构造,定义二叉树结点类型如下: ```python class TreeNode: def __init__(self, val=None, left=None, right=None): self.val = val self.left = left self.right = right ``` 然后我们可以依次创建每个结点,并将它们链接起来,实现整个二叉树的构造,代码如下: ```python # 创建二叉树结点 node1 = TreeNode(1) node2 = TreeNode(2) node3 = TreeNode(3) node4 = TreeNode(4) node5 = TreeNode(5) node6 = TreeNode(6) node7 = TreeNode(7) # 构造二叉树 node4.left = node2 node4.right = node6 node2.left = node1 node2.right = node3 node6.left = node5 node6.right = node7 ``` 完成了二叉树的构造后,我们就可以使用前序遍历中序遍历后序遍历输出结点数据了,代码如下: ```python # 前序遍历 def preorder(root): if not root: return print(root.val, end=" ") preorder(root.left) preorder(root.right) # 中序遍历 def inorder(root): if not root: return inorder(root.left) print(root.val, end=" ") inorder(root.right) # 后序遍历 def postorder(root): if not root: return postorder(root.left) postorder(root.right) print(root.val, end=" ") # 测试遍历函数 print("前序遍历:", end="") preorder(node4) print() print("中序遍历:", end="") inorder(node4) print() print("后序遍历:", end="") postorder(node4) print() ``` 输出结果为: ``` 前序遍历:4 2 1 3 6 5 7 中序遍历:1 2 3 4 5 6 7 后序遍历:1 3 2 5 7 6 4 ``` 接下来,我们以合理的格式,输出各个结点和双亲、孩子结点信息。代码如下: ```python # 输出结点和双亲、孩子结点信息 def print_tree(root): if not root: return print("结点:", root.val) if root.left: print(" 左孩子:", root.left.val) if root.right: print(" 右孩子:", root.right.val) if root.left or root.right: print(" 双亲:", root.val) print_tree(root.left) print_tree(root.right) # 测试输出函数 print_tree(node4) ``` 输出结果为: ``` 结点: 4 左孩子: 2 右孩子: 6 结点: 2 左孩子: 1 右孩子: 3 双亲: 4 结点: 1 双亲: 2 结点: 3 双亲: 2 结点: 6 左孩子: 5 右孩子: 7 双亲: 4 结点: 5 双亲: 6 结点: 7 双亲: 6 ``` 最后,我们输出所有的叶子结点信息,代码如下: ```python # 输出所有叶子结点信息 def print_leaves(root): if not root: return if not root.left and not root.right: print(root.val, end=" ") print_leaves(root.left) print_leaves(root.right) # 测试输出函数 print("叶子结点:", end="") print_leaves(node4) ``` 输出结果为: ``` 叶子结点:1 3 5 7 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值