如何实现每日编程Day 3中逆时针90度打印二叉树的方法?

更新于
2026-10-10 02:47:12
1阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

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

如何实现每日编程Day 3中逆时针90度打印二叉树的方法?

题目描述:设计一个递归算法,将一棵二叉树逆时针旋转90度打印出来。

设计思路:通过观察不难发现,实际上是将二叉树进行先右后左的中序遍历。

解决方法:

1.首先递归地处理右子树。

2.打印当前节点的值。

3.然后递归地处理左子树。

具体步骤:

1.定义一个递归函数,接收当前节点和旋转角度。

2.如果当前节点为空,直接返回。

3.如果旋转角度为0,直接打印当前节点值。

如何实现每日编程Day 3中逆时针90度打印二叉树的方法?

4.否则,递归调用函数处理右子树,旋转角度减1。

5.打印当前节点值。

6.递归调用函数处理左子树,旋转角度减1。

代码实现:

pythonclass TreeNode: def __init__(self, val=0, left=None, right=None): self.val=val self.left=left self.right=right

def 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分钟。

如何实现每日编程Day 3中逆时针90度打印二叉树的方法?

题目描述:设计一个递归算法,将一棵二叉树逆时针旋转90度打印出来。

设计思路:通过观察不难发现,实际上是将二叉树进行先右后左的中序遍历。

解决方法:

1.首先递归地处理右子树。

2.打印当前节点的值。

3.然后递归地处理左子树。

具体步骤:

1.定义一个递归函数,接收当前节点和旋转角度。

2.如果当前节点为空,直接返回。

3.如果旋转角度为0,直接打印当前节点值。

如何实现每日编程Day 3中逆时针90度打印二叉树的方法?

4.否则,递归调用函数处理右子树,旋转角度减1。

5.打印当前节点值。

6.递归调用函数处理左子树,旋转角度减1。

代码实现:

pythonclass TreeNode: def __init__(self, val=0, left=None, right=None): self.val=val self.left=left self.right=right

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