如何逆时针90度打印二叉树,每日编程Day 3挑战?
- 内容介绍
- 文章标签
- 相关推荐
本文共计475个文字,预计阅读时间需要2分钟。
题目描述:编写一个递归算法,将一棵二叉树按照逆时针90度的方向打印出来。以下是一棵二叉树的示例,要求以图右的形式打印:
1 / \ 2 3 / \ / \ 4 5 6 7
解决方案:通过观察不难发现,这实际上是将二叉树的先右后左的中序遍历结果旋转90度得到的。下面是实现这一功能的递归算法:
pythonclass TreeNode: def __init__(self, x): self.val=x self.left=None self.right=None
def print_counter_clockwise(root): if not root: return # 首先打印右子树 print_counter_clockwise(root.right) # 然后打印当前节点 print(root.val, end=' ') # 最后打印左子树 print_counter_clockwise(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_counter_clockwise(root)
输出结果应该是:
37 6 2 1 4 5
问题描述
设计一个递归算法,将一棵二叉树逆时针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;
}
本文共计475个文字,预计阅读时间需要2分钟。
题目描述:编写一个递归算法,将一棵二叉树按照逆时针90度的方向打印出来。以下是一棵二叉树的示例,要求以图右的形式打印:
1 / \ 2 3 / \ / \ 4 5 6 7
解决方案:通过观察不难发现,这实际上是将二叉树的先右后左的中序遍历结果旋转90度得到的。下面是实现这一功能的递归算法:
pythonclass TreeNode: def __init__(self, x): self.val=x self.left=None self.right=None
def print_counter_clockwise(root): if not root: return # 首先打印右子树 print_counter_clockwise(root.right) # 然后打印当前节点 print(root.val, end=' ') # 最后打印左子树 print_counter_clockwise(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_counter_clockwise(root)
输出结果应该是:
37 6 2 1 4 5
问题描述
设计一个递归算法,将一棵二叉树逆时针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;
}

