java翻转树_【LeetCode(Java) - 156】上下翻转二叉树
【LeetCode(Java) - 156】上下翻转二叉树
【LeetCode(Java) - 156】上下翻转二叉树
文章目录
1、题目描述
2、解题思路
3、解题代码
1、题目描述
2、解题思路
??光看题目还是懵懵懂懂,不如我把一个二叉树倒着过来看:
??我们可以看出一个规律:对于任意一个节点,它的右结点变为左子节点的左子节点,它自己变为它左子节点的右子结点。
??我们知道,对于一个节点来说,关心的是它的左右子结点,至于它的父节点是谁可以递归求解。
??因此,我们需要对每一个节点的左子节点进行重新设置左右节点。
??定义一个 head 作为新的头结点。
??定义 DFS 函数,功能如下:
??1、node 为叶子节点且 head 为空,则 node 的左子节点成为新的头结点,head = node.left;
??2、node 为 null,return;
??3、node 不是叶子节点也不为 null,则把 node 的右子节点作为 node 的左子节点的左子节点,node 自己作为它左子节点的右子节点,最后 node 的左右子结点置空,即不再是原来左右子结点的父节点了。
3、解题代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
// 处理之后的根节点
TreeNode head;
public TreeNode upsideDownBinaryTree(TreeNode root) {
if (root == null) {
return null;
}
dfs(root); // 对 root 进行上下翻转
return head;
}
public TreeNode dfs(TreeNode node) {
if (node == null) {
return null;
}
if (node.left == null && node.right == null) {
if (head == null) {
// 最左边的节点即为实际的根节点
head = node;
}
return node;
}
TreeNode left = dfs(node.left);
TreeNode right = dfs(node.right);
if (left != null) {
// 左孩子的左子树为当前的右节点
left.left = right;
// 左孩子的右子树为当前父节点
left.right = node;
}
// 清空的当前父节点的左右子树
node.right = null;
node.left = null;
return node;
}
}
【LeetCode(Java) - 156】上下翻转二叉树相关教程
java翻转树_【LeetCode(Java) - 156】上下翻转二叉树相关推荐
- java 画树_用JAVA画一颗树(Applet)
1.松树: import java.awt.*; import java.applet.*; public class Tree extends Applet { public void paint( ...
- java 源树_【Java源码】树-概述
树的基本术语 结点(node)由数据元素以及指向子树的地址构成. 若 X 结点有子树,则子树的根结点称为 X 的孩子(child)结点,相应地, X 称为其孩子的双亲(parents)结点,又称父母结 ...
- java 区间树_线段树(区间树)之区间染色和4n推导过程
前言 线段树(区间树)是什么呢?有了二叉树.二分搜索树,线段树又是干什么的呢?最经典的线段树问题:区间染色:正如它的名字而言,主要解决区间的问题 一.线段树说明 1.什么是线段树? 线段树首先是二叉树 ...
- java 数据结构实例_数据结构(Java)——栈的实例
惟大英雄能本色,是真名士自风流 --易中天(百家讲坛) 1.表达式的转换 1.1 中缀表达式转前缀表达式 中缀表达式转前缀表达式有许多的方式,有加括号去除法.语法树遍历法.堆栈处理法1. 测试程序的实 ...
- java 分割一个_分割java
[java]分割字符串工具类,霸气 jdk自带的 java 分割字符串,分割string,可以根据多个条件去分割.比如逗号,分号,逗号或者分号. 比如一个字符串:"abc,def;gh,ij ...
- java swing计算机_使用java swing仿window7标准计算器界面
完整代码 ----- package com.lfd.view; import java.awt.BorderLayout; import java.awt.Color; import java.aw ...
- java高级教程_高级Java教程
java高级教程 课程大纲 学习Java基础很容易. 但是,真正钻研该语言并研究其更高级的概念和细微差别将使您成为一名出色的Java开发人员. 网络上充斥着"软","便宜 ...
- java正则表达式 匹配()_学习Java正则表达式(匹配、替换、查找)
import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public c ...
- 纯java分布式内存数据库_最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发...
最近可能有点闲的慌,没事就去找面试面经,整理了一波面试题.我大概是分成了Java基础.中级.高级,分布式,Spring架构,多线程,网络,MySQL,Redis缓存,JVM相关,调优,设计模式,算法与 ...
最新文章
- python判断素数的函数_如何用python求素数
- 深圳.NET俱乐部7月活动小结及照片
- Mysql学习笔记之常用数据类型
- UITextView,UITextField 和UIAlertView 在ios8上 当pop时候出现闪bug
- 加个属性让div成纵向横向无缝滚动(支持IE和FF)
- Flume原理及使用案例
- plsql中文乱码,显示问号
- b站2020用户画像_B站2020年度动画大选来袭!论引战,还是要看B站
- Picasso detected an unsupported OkHttp on the ...
- C#笔记05 方法和参数
- Arduino时钟LCD显示
- MEM/MBA英语基础(04) 句子结构 翻译划分练习
- 594万元奖金 | “2020 年全国人工智能大赛”重磅启动
- ear的英语怎么念_ears用英语怎么读?
- 8.4|Crypto Tech Night 第十六期:深入探索DeFi的“代码世界”
- c语言的编程switch,C语言之switch详解
- 如何正确理解开漏输出和推挽输出
- c++单链表 一元多项式求和_C++一元多项式相加
- html哭脸字符,科学网—Unicode中的符号 - 丁祥欢的博文
- 如何防止用户论坛恶意灌水