java语言根据生成的包含20个随机数组生成对应二叉树(eclipse)

1.先在eclipse中创建一个project

 2.在src中创建3个类(class)

 3.BinaryTree.java

public class BinaryTree {
	public Node root = null;
	
	//插入
	  public String insert(int value) {
			String error = null;
			
			Node node = new Node(value);
			if (root == null) {
				root = node;
				root.leftChild  = null;
				root.rightChild = null;
			} else {
				Node current = root;
				Node parent = null;
				while (true) {
					if (value < current.value) {
						parent = current;
						current = current.leftChild;
						if (current == null) {
							parent.leftChild = node;
							break;
						}
					} else if (value > current.value) {
						parent = current;
						current = current.rightChild;
						if (current == null) {
							parent.rightChild = node;
							break;
						}
					} else {
						error = "having same value in binary tree";
					}	
				} // end of while
			}
			return error;
	    }
	  
	  /**
		 * 
		 * 得到后继节点,即删除节点的左后代
		 */
		private Node getSuccessor(Node delNode) {
			Node successor = delNode;
			Node successorParent = null;
			Node current = delNode.rightChild;
			
			while (current != null) {
				successorParent = successor;
				successor = current;
				current = current.leftChild;
			}
			
			//如果后继节点不是删除节点的右子节点时,
			if (successor != delNode.rightChild) {
				//要将后继节点的右子节点指向后继结点父节点的左子节点,
				successorParent.leftChild = successor.rightChild;
				//并将删除节点的右子节点指向后继结点的右子节点
				successor.rightChild = delNode.rightChild;
			}
			//任何情况下,都需要将删除节点的左子节点指向后继节点的左子节点
			successor.leftChild = delNode.leftChild;
			
			return successor;
		}
		
	  public boolean delete(int value) {
			Node current = root;    //需要删除的节点
			Node parent = null;     //需要删除的节点的父节点
			boolean isLeftChild = true;   //需要删除的节点是否父节点的左子树
			
			while (true) {
				if (value == current.value) {
					break;
				} else if (value < current.value) {
					isLeftChild = true;
					parent = current;
					current = current.leftChild;
				} else {
					isLeftChild = false;
					parent = current;
					current = current.rightChild;
				}
				
				//找不到需要删除的节点,直接返回
				if (current == null)
					return false;
			}
			
			//分情况考虑
			//1、需要删除的节点为叶子节点
			if (current.leftChild == null && current.rightChild == null) {
				//如果该叶节点为根节点,将根节点置为null
				if (current == root) {
					root = null;
				} else {
					//如果该叶节点是父节点的左子节点,将父节点的左子节点置为null
					if (isLeftChild) {
						parent.leftChild  = null;
					} else { //如果该叶节点是父节点的右子节点,将父节点的右子节点置为null
						parent.rightChild = null;
					}
				}
			} 
			//2、需要删除的节点有一个子节点,且该子节点为左子节点
			else if (current.rightChild == null) {
				//如果该节点为根节点,将根节点的左子节点变为根节点
				if (current == root) {
					root = current.leftChild;
				} else {
					//如果该节点是父节点的左子节点,将该节点的左子节点变为父节点的左子节点
					if (isLeftChild) {
						parent.leftChild = current.leftChild;
					} else {  //如果该节点是父节点的右子节点,将该节点的左子节点变为父节点的右子节点
						parent.rightChild = current.leftChild;
					}
				}
			}
			//2、需要删除的节点有一个子节点,且该子节点为右子节点
			else if (current.leftChild == null) {
				//如果该节点为根节点,将根节点的右子节点变为根节点
				if (current == root) {
					root = current.rightChild;
				} else {
					//如果该节点是父节点的左子节点,将该节点的右子节点变为父节点的左子节点
					if (isLeftChild) {
						parent.leftChild = current.rightChild;
					} else {  //如果该节点是父节点的右子节点,将该节点的右子节点变为父节点的右子节点
						parent.rightChild = current.rightChild;
					}
				}
			}
			//3、需要删除的节点有两个子节点,需要寻找该节点的后续节点替代删除节点
			else {
				Node successor = getSuccessor(current);
				//如果该节点为根节点,将后继节点变为根节点,并将根节点的左子节点变为后继节点的左子节点
				if (current == root) {
					root = successor;
				} else {
					//如果该节点是父节点的左子节点,将该节点的后继节点变为父节点的左子节点
					if (isLeftChild) {
						parent.leftChild = successor;
					} else {  //如果该节点是父节点的右子节点,将该节点的后继节点变为父节点的右子节点
						parent.rightChild = successor;
					}
				}
			}
			current = null;
			return true;
		}
	  /**
		 * //中序遍历(递归):
		 *    1、调用自身来遍历节点的左子树
		 *    2、访问这个节点
		 *    3、调用自身来遍历节点的右子树
		 */
		public void inOrderTraverse() {
			System.out.print("中序遍历:");
			inOrderTraverse(root);
			System.out.println();
		}
		
		private void inOrderTraverse(Node node) {
			if (node == null) 
				return ;
			
			inOrderTraverse(node.leftChild);
			node.display();
			inOrderTraverse(node.rightChild);
		}
}

4.Node.java



public class Node {
	int  value;
	Node leftChild;
	Node rightChild;
	
	Node(int value) {
		this.value = value;
	}
	
	public void display() {
		System.out.print(this.value + "\t");
	}
 
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return String.valueOf(value);
	}
}

5.BinaryTreeDemo.java


import java.util.Random;
import java.util.Scanner;

public class BinaryTreeDemo {
		public static void main(String[] args) {
	        BinaryTree binaryTree=new BinaryTree();
	        int a[]=new int[20];   // store 20 random numbers
	        int value;
	        Random r=new Random();
	        for(int i=0;i<20;i++){
	            value= r.nextInt(100);
	            a[i]=value;
	        }
	        
	        for(int i=0;i<20;i++){
	            binaryTree.insert(a[i]);
	            //insert the 20 random numbers into the defined binary tree
	        }
            binaryTree.inOrderTraverse();
	        //delete a node from the tree
	        Scanner sc=new Scanner(System.in);
	        System.out.println("please input a value that you want to delete:");
	        value=sc.nextInt();
	       binaryTree.delete(value);
	       binaryTree.inOrderTraverse();
	        //insert a node randomly into the tree
	        value=r.nextInt(100);
	        binaryTree.insert(value);
	        binaryTree.inOrderTraverse();
	    }


	}


6.运行结果截图:

图1 

 图2

 图2续

 注:生成二叉树代码参考自:二叉树之Java实现二叉树基本操作_fengrunche的博客-优快云博客

### Adobe Photoshop 的使用教程与下载指南 Adobe Photoshop 是一款功能强大的图像编辑软件,广泛应用于图形设计、照片处理以及艺术创作等领域。以下是关于其使用教程和官方下载的相关信息。 #### 下载 Adobe Photoshop 用户可以通过访问 Adobe 官方网站来获取最新版本的 Photoshop 软件[^1]。具体操作如下: - 访问 [Adobe 官网](https://www.adobe.com/) 并登录您的账户。 - 进入 Adobe Creative Cloud 页面,在应用列表中找到 Photoshop- 单击“立即下载”按钮并按照提示完成安装过程。 对于希望试用该产品的用户来说,Adobe 提供了一个为期七天的免费试用期。在此期间,您可以体验完整的功能而无需支付费用。 #### 使用渐变工具实现色彩过渡效果 当您需要为作品增添一种平滑的颜色变化时,“渐变工具”将是不错的选择之一[^2]。下面详细介绍如何利用此功能制作简单的渐变图案: 1. 启动 Photoshop 应用程序之后,创建一个新的文件或者加载现有的项目文档; 2. 设置好所需的前景色与背景色作为渐变两端的颜色配置; 3. 工具箱里选取“Gradient Tool (G)”图标激活它; 4. 上方属性面板允许自定义不同类型的梯度样式比如Linear Gradient(线性), Radial Gradients(放射状); 5. 鼠标按住不放从起始位置拉至目标结束处松开即可生成相应方向上的渐变区域. ```python # 示例代码展示如何通过Python调用Photoshop API设置颜色(仅作演示用途) from photoshop import Session with Session() as ps: doc = ps.activeDocument # 更改前景色 app.foregroundColor.rgb.red = 255 app.foregroundColor.rgb.green = 0 app.foregroundColor.rgb.blue = 0 # 更改背景色 app.backgroundColor.rgb.red = 0 app.backgroundColor.rgb.green = 0 app.backgroundColor.rgb.blue = 255 ``` 上述脚本片段展示了怎样借助 Python 和 `photoshop` 模块控制应用程序中的颜色参数设定.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值