1. 递归

2. 栈

package org.skyeye.test;

import java.util.Stack;

public class TreeSwap {

public static class Tree{

private Object data;

private Tree left;

private Tree right;

public Tree(Object data, Tree left, Tree right) {

this.data = data;

this.left = left;

this.right = right;

}

public Object getData() {

return data;

}

public void setData(Object data) {

this.data = data;

}

public Tree getLeft() {

return left;

}

public void setLeft(Tree left) {

this.left = left;

}

public Tree getRight() {

return right;

}

public void setRight(Tree right) {

this.right = right;

}

}

public static int getMaxDepth(Tree root) {

if(root==null) {

return 0;

}

return Math.max(getMaxDepth(root.left), getMaxDepth(root.right))+1;

}

public static void swap1(Tree root) {

if(root == null) {

return;

}

Tree tmp = root.left;

root.left = root.right;

root.right = tmp;

swap1(root.left);

swap1(root.right);

}

public static void swap2(Tree root) {

if(root==null) {

return;

}

Stack stack = new Stack();

stack.push(root);

while(!stack.empty()) {

Tree node = stack.pop();

Tree tmp = node.left;

node.left = node.right;

node.right = tmp;

if(node.left!=null) {

stack.push(node.left);

}

if(node.right!=null) {

stack.push(node.right);

}

}

}

public static void main(String[] args) {

Tree lll = new Tree(1, null, null);

Tree ll = new Tree(2, lll, null);

Tree lr = new Tree(3, null, null);

Tree l = new Tree(4, ll, lr);

Tree rl = new Tree(7, null, null);

Tree rr = new Tree(8, null, null);

Tree r = new Tree(6, rl, rr);

Tree root = new Tree(5, l, r);

swap2(root);

System.out.println(root);

}

}

Java交换二叉树的左右子树_二叉树左右子树交换相关推荐

  1. java二叉树求权值_二叉树中的权值是什么?

    展开全部 二叉树中的权值就是对叶子结点赋予的一个有意义的数量值. 一棵深度为k,且有2^k-1个节点的二叉树,32313133353236313431303231363533e58685e5aeb93 ...

  2. Java二叉树逆序遍历_二叉树遍历小结

    二叉树遍历小结 声明 0 二叉树遍历概述 二叉树遍历:按照既定序,对每个节点仅访问一次: 二叉树非递归遍历思想:参考这篇博文,核心思想是存在重合元素的局部有序保证整体有序,由于二叉树的结构特点,二叉树 ...

  3. 二叉树线索化示意图_二叉树的线索化

    二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历.二叉树作为存储结构时,一个节点只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继.为了保存这种在 ...

  4. 二叉树深度和高度_二叉树的高度和深度

    二叉树深度和高度 In this tutorial, we will learn how to find height and depth of binary tree with program im ...

  5. java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...

    1 packageSolution;2 3 importjava.util.LinkedList;4 importjava.util.Queue;5 importjava.util.Stack;6 7 ...

  6. java根节点到叶子节点_二叉树根节点到叶子节点的所有路径和

    我觉得这个题目和剑指offer中的一道题目非常相似.先说这个题: 解题思路:从根结点开始,当每访问到一个结点,我们把该结点添加到路径上,并"累加" 该结点的值,这里"累加 ...

  7. 二叉树后序遍历_二叉树后序遍历非递归实现

    二叉树的后序遍历非递归实现是三种遍历实现里面最复杂的一种了. 后序遍历的顺序是左节点-右节点-根节点,因为二叉树每个节点只有指向子节点的指针而没有指向父节点的指针,因此我们需要一个额外的变量来记录是否 ...

  8. 二叉树线索化示意图_二叉树的线索化算法思想详解

    二叉树的线索化,这几天以来我很难掌握,今天终于想通了,哈哈,首先我们来看看二叉树线索化之后会变成什么样子,这里我们以图中的二叉树为例,图如下: 画的太糙,各位看官讲究着看吧- -.所谓二叉树的线索化, ...

  9. 二叉树线索化示意图_二叉树线索化

    程序代码: 1 #include 2 using namespacestd;3 typedef enum 4 {5 LINK,6 THREAD7 }PointerTag;8 template 9 st ...

最新文章

  1. 刘伟:什么是智能人机交互?
  2. 第八课_采购管理、信息与配置管理
  3. Android——使用纯java代码实现线性布局(通俗易懂)
  4. 7-2 页面置换算法--LRU (50 分)
  5. python3.0下载用什么浏览器_无法让Python下载网页源代码:“不支持浏览器版本”...
  6. Python与自然语言处理搭建环境
  7. c语言用分治法求最大最小值,C语言实现分治法实例
  8. 同比和与环比的计算公式
  9. php js广告,JavaScript_用JS调用谷歌 AdSense广告的方法, 具体的google广告的js文件做 - phpStudy...
  10. TokenGazer《一问到底》| 第55期:研究员 VS Dimension
  11. 微软Excel 2007 框里打钩/打钩的方框选择
  12. 西门子PLC1200 TCP通讯
  13. 潘多拉-视频播放器,一个轻量的视频播放器
  14. Java中Stack详解
  15. 图像处理之几何变换(python实现)
  16. [-Flutter趣玩篇-] 出神入化的Align+动画
  17. Java程序性能优化-概述
  18. 解决CentOS启动提示unexpected inconsistency;RUN fsck MANUALLY的问题(断电重启报错)
  19. Linux如何打开cp2k,cp2k实战案例讲解讲座 带你入门cp2k
  20. 拆机解决Thinkpad笔记本键盘显示屏接触不良问题

热门文章

  1. 财务分析之资产负债表
  2. 在微信公众号上下载视频音频的办法
  3. VIVADO学习笔记之--DONT_TOUCH
  4. Windows中redis设置密码
  5. EasyPoi Excel简单导出导入
  6. 未知USB设备 端口重置失败
  7. 刚体运动部分(坐标、旋转、平移、李群和李代数)
  8. pytorch导出onnx格式模型时,不固定输入输出维度
  9. DICOM MPPS 的原理及应用(Principle and Application of DICOM MPPS)
  10. 无忧·企业文档2.1.4版本更新清单说明来啦