java swing实现小球沿正弦曲线运动的代码

问题:

给定的二叉查找树中,有两个节点不小心被调换了位置,现在需要将其修正,不改变树的结构。

分析:

二叉排序树的中序遍历是有序的,所以这个问题又是建立在中序遍历模板上的问题,所以我们可以对其进行中序遍历,并用一个pre指针指向当前遍历结果中的最后一个结点,即下次遍历前的前一个结点。然后就可以通过将当前结点与pre结点进行比较,来判断是否有序了。若乱序,就将这两个结点都放入到预先定义的容器中。

错误的形式就这两种,我们看到,在乱序容器中,最多就存了四个元素,所以空间复杂度还是满足O(n)的,当然也可以用两个指针分别指向要进行调整的两个结点,如上图分别指向 2 和 1, 4 和 1.

实现:

//store disorder nodes, most of the number is 4.
vector<TreeNode*> outorder;
//point to the last node of inorder sequence
TreeNode *pre = NULL;
void visitInorder(TreeNode* root){

	if(root == NULL)
		return;

	if(root->left)
		visitInorder(root->left);

	if(pre == NULL)
		pre = root;

	else if(root->val < pre->val){

	    outorder.push_back(pre);
		outorder.push_back(root);

	}
	//move pre to the new tail.
	pre = root;
	if(root->right)
		visitInorder(root->right);
}

void recoverTree(TreeNode *root) {

	if( NULL == root )
		return;

	visitInorder(root);

	if(outorder.size())
	{
		swap(outorder[0]->val, outorder[outorder.size() - 1]->val);
	}
}

java swing实现小球沿正弦曲线运动的代码

时间: 2024-08-30 01:50:55

java swing实现小球沿正弦曲线运动的代码的相关文章

Java_Swing实现小球沿正弦曲线运动的代码

1 package zuidaimapack_1; 2 import java.awt.*; 3 import javax.swing.*; 4 /** 5 *Java_Swing实现小球沿正弦曲线运动的代码 6 * @author Visec·Dana 7 */ 8 public class SinRun extends JFrame implements Runnable { 9 private static final long serialVersionUID = 1L; 10 stat

java swing实现动态心形图案的代码下载

代码下载地址:http://www.zuidaima.com/share/1852319645518848.htm 原文:java swing实现动态心形图案的代码下载 package com.zuidaima.swing; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JFrame; @SuppressWarn

java swing 防抖机制

从问题开始说. 我们产品的 操作台(workbench) 是一个java swing程序. 有一个event handler的代码如下: public void actionPerformed(ActionEvent e) { // 做耗时的工作, 如插入数据库 } 现在的一个问题在于, 如果用户连续点了两次button, 则event handler被执行两次, 则用户会得到 主键重复错误. 简单的想法是 在event handler的开头结尾把 对应的ok button给disable/en

Atitit。D&amp;D drag&amp;drop拖拽功能c#.net java swing的对比与实现总结

Atitit.D&D drag&drop拖拽功能c#.net java swing的对比与实现总结 1. 实现一个D&D操作一般包括三个步骤: 1 2. .net黑头的拖曳机制.必须有DragEnter事件(单独写DragDrop事件是不会具有拖拽功能的) 2 3. ---java黑头的拖曳..必须有DragEnter事件(单独写 Drop事件是不会具有拖拽功能的) 2 4. 代码 3 5. 参考 5 1. 实现一个D&D操作一般包括三个步骤: 首先实现一个拖拽源,这个拖拽

【小型系统】抽奖系统-使用Java Swing完成

一.需求分析 1. 显示候选人照片和姓名. 2. 可以使用多种模式进行抽奖,包括一人单独抽奖.两人同时抽奖.三人同时抽奖. 3. 一个人可以在不同的批次的抽奖中获取一.二.三等奖,但是不能在同一批次抽奖中获取多个奖项. 二.系统总体框架 系统需求比较简单,采用Java Swing技术可以很好的实现,系统的总体类框架图如下 说明:基于主要的三个类就可以完成所需要的功能,Frame有Panel类型与MouseAdapter类型的成员,Panel主要用户存放具体的控件和绘制相应的信息,MouseAda

解决 GTK+/GNOME 3 环境下 Java Swing 程序使用本地 GTK+ 主题时菜单无边框 bug 的方法

在 GTK+/GNOME 3 环境下采用默认的 Adwaita 主题时,Java Swing 程序如果使用本地 GTK+ 主题会出现菜单无边框的 bug,这个问题也可能在其他常用的 GTK+ 主题中出现.说这是 Java Swing 的 bug 还是 GTK+/GNOME 3 的主题(如 Adwaita)的 bug 其实意义不是太大.这里给出一个简单的解决办法,其思路是修改 GTK+/GNOME 3 的主题,这里以系统默认的 Adwaita 主题为例: Adwaita 主题文件位于 /usr/s

(转载) Java Swing 之 JScrollPane (滚动面板) 使用方法

1 /** 2 * java swing 之JScrollPane面板 3 * 在设置界面时,可能会遇到在一个较小的容器窗体中显示一个较大部分的内容,这时可以使用 4 * JScrollPane面板,JscrollPane面板是带滚动条的面板,也是一种容器,但是常用于布置单个 5 * 控件,并且不可以使用布局管理器.如果需要在JScrollPane面板中放置多个控件,需要将多个 6 * 控件放置到JPanel 面板上,然后将JPanel面板作为一个整体控件添加到JScrollPane控件上. 7

抽奖系统-使用Java Swing完成

一.需求分析 1. 显示候选人照片和姓名. 2. 可以使用多种模式进行抽奖,包括一人单独抽奖.两人同时抽奖.三人同时抽奖. 3. 一个人可以在不同的批次的抽奖中获取一.二.三等奖,但是不能在同一批次抽奖中获取多个奖项. 二.系统总体框架 系统需求比较简单,采用Java Swing技术可以很好的实现,系统的总体类框架图如下 说明:基于主要的三个类就可以完成所需要的功能,Frame有Panel类型与MouseAdapter类型的成员,Panel主要用户存放具体的控件和绘制相应的信息,MouseAda

atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform

atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform 1. Absoluti 布局(经常使用) 1 2. Flow 布局(不经常使用) 1 3. BorderLayout (不经常使用) 1 4. BoxLayout( html默认布局) 2 5. CardLayout (tab 布局) 2 6. GridLayout 3 7. GridBagLayout 3 8. Fixed 定位(不经常使用) 3