如何实现每日编程Day 3中逆时针90度打印二叉树的方法?
- 内容介绍
- 文章标签
- 相关推荐
本文共计586个文字,预计阅读时间需要3分钟。
题目描述:设计一个递归算法,将一棵二叉树逆时针旋转90度打印出来。
设计思路:通过观察不难发现,实际上是将二叉树进行先右后左的中序遍历。
解决方法:
1.首先递归地处理右子树。
2.打印当前节点的值。
3.然后递归地处理左子树。
具体步骤:
1.定义一个递归函数,接收当前节点和旋转角度。
2.如果当前节点为空,直接返回。
3.如果旋转角度为0,直接打印当前节点值。
4.否则,递归调用函数处理右子树,旋转角度减1。
5.打印当前节点值。
6.递归调用函数处理左子树,旋转角度减1。
代码实现:
pythonclass TreeNode: def __init__(self, val=0, left=None, right=None): self.val=val self.left=left self.right=rightdef print_tree_90_degree(root): if not root: return print_tree_90_degree(root.right) print(root.val, end=' ') print_tree_90_degree(root.left)
测试代码构建测试用例root=TreeNode(1)root.left=TreeNode(2)root.right=TreeNode(3)root.left.left=TreeNode(4)root.left.right=TreeNode(5)root.right.left=TreeNode(6)root.right.right=TreeNode(7)
打印结果print_tree_90_degree(root)
输出结果:
76 5 4 3 2 1
问题描述
设计一个递归算法,将一棵二叉树逆时针90度打印出来。如下图左的二叉树,以图右的形式打印。
解决方法
通过观察不难发现,其实是二叉树的先右后左的中序遍历。
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int Status;
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status CreateBiTree(BiTree *T)
{
char ch;
ch=getchar();
if(ch=='#')
*T=NULL;
else
{
(*T)=(BiTNode*)malloc(sizeof(BiTNode));
if(!*T)
exit(OVERFLOW);
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
return OK;
}
void fun2(BiTree T,int n)
{
int i=0;
if(T)
{
fun2(T->rchild,n+3);
for(i=0;i<=n;i++)
printf(" ");
printf("%c\n",T->data);
fun2(T->lchild,n+3);
}
}
int main()
{
BiTree T;
int n=0;
printf("请先输入一个二叉链表:");
CreateBiTree(&T);
printf("逆时针90度的二叉链表为:\n");
fun2(T,5);
return 0;
}
本文共计586个文字,预计阅读时间需要3分钟。
题目描述:设计一个递归算法,将一棵二叉树逆时针旋转90度打印出来。
设计思路:通过观察不难发现,实际上是将二叉树进行先右后左的中序遍历。
解决方法:
1.首先递归地处理右子树。
2.打印当前节点的值。
3.然后递归地处理左子树。
具体步骤:
1.定义一个递归函数,接收当前节点和旋转角度。
2.如果当前节点为空,直接返回。
3.如果旋转角度为0,直接打印当前节点值。
4.否则,递归调用函数处理右子树,旋转角度减1。
5.打印当前节点值。
6.递归调用函数处理左子树,旋转角度减1。
代码实现:
pythonclass TreeNode: def __init__(self, val=0, left=None, right=None): self.val=val self.left=left self.right=rightdef print_tree_90_degree(root): if not root: return print_tree_90_degree(root.right) print(root.val, end=' ') print_tree_90_degree(root.left)
测试代码构建测试用例root=TreeNode(1)root.left=TreeNode(2)root.right=TreeNode(3)root.left.left=TreeNode(4)root.left.right=TreeNode(5)root.right.left=TreeNode(6)root.right.right=TreeNode(7)
打印结果print_tree_90_degree(root)
输出结果:
76 5 4 3 2 1
问题描述
设计一个递归算法,将一棵二叉树逆时针90度打印出来。如下图左的二叉树,以图右的形式打印。
解决方法
通过观察不难发现,其实是二叉树的先右后左的中序遍历。
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int Status;
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status CreateBiTree(BiTree *T)
{
char ch;
ch=getchar();
if(ch=='#')
*T=NULL;
else
{
(*T)=(BiTNode*)malloc(sizeof(BiTNode));
if(!*T)
exit(OVERFLOW);
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
return OK;
}
void fun2(BiTree T,int n)
{
int i=0;
if(T)
{
fun2(T->rchild,n+3);
for(i=0;i<=n;i++)
printf(" ");
printf("%c\n",T->data);
fun2(T->lchild,n+3);
}
}
int main()
{
BiTree T;
int n=0;
printf("请先输入一个二叉链表:");
CreateBiTree(&T);
printf("逆时针90度的二叉链表为:\n");
fun2(T,5);
return 0;
}

