赞
踩
本关任务:给定一棵二叉树,使用非递归的方式实现二叉树左右子树交换,并输出后序遍历结果。
为了完成本关任务,你需要掌握:1.栈的基本操作,2.二叉树后序遍历。
本关卡提供C++ STL
模板栈Stack
的相关操作和功能。
stack<int> s; // 创建栈对象
s.push(3); // 元素入栈
s.push(4);
cout<<s.size()<<endl; //打印栈表元素个数
while(!s.empty()) {
cout<<s.top()<<endl; // 打印栈顶元素
s.pop(); // 出栈
}
后序遍历postorder traversal
是指按照先左节点,再右节点,最后根节点的次序访问二叉树中所有的节点,使得每个节点被访问且仅被访问一次。例如:图1
的后序遍历顺序为节点上的数字,结果为:CDBFEA
。
本关的编程任务是补全右侧代码片段BiTreeChangeStack
和PostOrder
中Begin
至End
中间的代码,具体要求如下:
BiTreeChangeStack
中使用栈结构实现二叉树左右子树交换。PostOrder
中实现二叉树的后序遍历并输出结果,中间没有空格,末尾不换行。平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是平台的测试样例:
测试输入:ABC##D##EF###
预期输出:FEDCBA
测试输入:ABCD###E#F##G##
预期输出:GFEDCBA
- //
- // binary_tree.cpp
- // BinaryTreeApp
- //
- // Created by ljpc on 2018/5/3.
- // Copyright 2018年 ljpc. All rights reserved.
- //
-
- #include "binary_tree.h"
-
- BiTreeNode* BiTreeChangeStack(BiTreeNode* root)
- // 实现二叉树左右子树的交换(栈实现)
- // 参数:二叉树根节点root
- // 返回:二叉树
- {
- stack<BiTreeNode*> s;
- struct BiTreeNode* tnode = root;
- struct BiTreeNode* tmp = NULL;
- if(root == NULL)
- return NULL;
- while(1)
- {
- tmp = tnode->left;
- tnode->left = tnode->right;
- tnode->right = tmp;
- if(tnode->right)
- {
- s.push(tnode->right);
- }
- if(tnode->left)
- {
- tnode = tnode->left;
- }
- else
- {
- if(!s.empty())
- {
- tnode = s.top();
- s.pop();
- }
- else
- break;
- }
-
- }
- return root;
- }
-
- void PostOrder(BiTreeNode* root)
- // 二叉树的后序遍历
- // 参数:二叉树根节点root
- // 输出:二叉树的后序遍历,中间没有空格,末尾不换行。
- {
- if(root)
- {
- PostOrder(root->left);
- PostOrder(root->right);
- printf("%c", root->data);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。