如何逆时针90度打印二叉树,每日编程Day 3挑战?

2026-04-11 22:201阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计475个文字,预计阅读时间需要2分钟。

如何逆时针90度打印二叉树,每日编程Day 3挑战?

题目描述:编写一个递归算法,将一棵二叉树按照逆时针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度打印出来。如下图左的二叉树,以图右的形式打印。

如何逆时针90度打印二叉树,每日编程Day 3挑战?

解决方法

通过观察不难发现,其实是二叉树的先右后左的中序遍历。

#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度打印二叉树,每日编程Day 3挑战?

题目描述:编写一个递归算法,将一棵二叉树按照逆时针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度打印出来。如下图左的二叉树,以图右的形式打印。

如何逆时针90度打印二叉树,每日编程Day 3挑战?

解决方法

通过观察不难发现,其实是二叉树的先右后左的中序遍历。

#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; }