first commit

This commit is contained in:
2019-08-13 11:40:00 -05:00
commit a03be258da
155 changed files with 1145534 additions and 0 deletions

16
Notes/.idea/checkstyle-idea.xml generated Normal file
View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CheckStyle-IDEA">
<option name="configuration">
<map>
<entry key="checkstyle-version" value="8.5" />
<entry key="copy-libs" value="true" />
<entry key="location-0" value="BUNDLED:(bundled):Sun Checks" />
<entry key="location-1" value="BUNDLED:(bundled):Google Checks" />
<entry key="scan-before-checkin" value="false" />
<entry key="scanscope" value="JavaOnly" />
<entry key="suppress-errors" value="false" />
</map>
</option>
</component>
</project>

6
Notes/.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
Notes/.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/Notes.iml" filepath="$PROJECT_DIR$/Notes.iml" />
</modules>
</component>
</project>

956
Notes/.idea/workspace.xml generated Normal file
View File

@@ -0,0 +1,956 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="3061cf10-6d09-4e66-8724-d942d37683f7" name="Default" comment="" />
<ignored path="$PROJECT_DIR$/out/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="CheckStyle-IDEA-workspace">
<option name="configuration">
<map>
<entry key="last-active-plugin-version" value="5.22.1" />
</map>
</option>
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="KWSingleLinkedList.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3536">
<caret line="214" column="6" lean-forward="false" selection-start-line="214" selection-start-column="6" selection-end-line="214" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="BSTDriver.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Week6/BinaryTree/BSTDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="5" column="13" lean-forward="false" selection-start-line="5" selection-start-column="13" selection-end-line="5" selection-end-column="13" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="AVLTree.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Week9/AVLTree/AVLTree.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1904">
<caret line="114" column="9" lean-forward="false" selection-start-line="103" selection-start-column="10" selection-end-line="114" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="BinaryTree.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Week6/BinaryTree/BinaryTree.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4148">
<caret line="258" column="7" lean-forward="false" selection-start-line="258" selection-start-column="7" selection-end-line="258" selection-end-column="7" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Recursion.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/Week5/Recursion.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="442">
<caret line="29" column="5" lean-forward="false" selection-start-line="20" selection-start-column="4" selection-end-line="29" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="BinarySearchTreeWithRotate.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Week9/AVLTree/BinarySearchTreeWithRotate.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="12" column="13" lean-forward="false" selection-start-line="12" selection-start-column="13" selection-end-line="12" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="StackDriver.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Week5/StackDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="4" column="8" lean-forward="false" selection-start-line="4" selection-start-column="8" selection-end-line="4" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="KMStack.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Week5/KMStack.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="23" column="0" lean-forward="false" selection-start-line="23" selection-start-column="0" selection-end-line="23" selection-end-column="0" />
<folding>
<element signature="e#178#179#0" expanded="true" />
<element signature="e#216#217#0" expanded="true" />
<element signature="e#258#259#0" expanded="true" />
<element signature="e#295#296#0" expanded="true" />
<element signature="e#329#330#0" expanded="true" />
<element signature="e#377#378#0" expanded="true" />
<marker date="1538432048000" expanded="true" signature="509:515" ph=" }" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="AdapterStack.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Week5/AdapterStack.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="136">
<caret line="8" column="8" lean-forward="false" selection-start-line="8" selection-start-column="8" selection-end-line="8" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="KWSingleLinkedListDriver.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Class" />
</list>
</option>
</component>
<component name="GradleLocalSettings">
<option name="externalProjectsViewState">
<projects_view />
</option>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/src/Week1/KWArrayList/KWArrayList.java" />
<option value="$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java" />
<option value="$PROJECT_DIR$/src/Week1/KWSingleLinkedList.java" />
<option value="$PROJECT_DIR$/src/Week1/Exam1Review.java" />
<option value="$PROJECT_DIR$/src/Week1/KWArrayList.java" />
<option value="$PROJECT_DIR$/src/Week5/AdapterStack.java" />
<option value="$PROJECT_DIR$/src/Week5/KMStack.java" />
<option value="$PROJECT_DIR$/src/Week5/StackDriver.java" />
<option value="$PROJECT_DIR$/src/Week5/Recursion.java" />
<option value="$PROJECT_DIR$/src/Week6/ComparableDriver.java" />
<option value="$PROJECT_DIR$/src/Week6/BinaryTree/BSTDriver.java" />
<option value="$PROJECT_DIR$/src/Week6/BinaryTree.java" />
<option value="$PROJECT_DIR$/src/Week6/Student.java" />
<option value="$PROJECT_DIR$/src/Week9/AVLTree/AVLTree.java" />
</list>
</option>
</component>
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsGulpfileManager">
<detection-done>true</detection-done>
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="NodePackageJsonFileManager">
<packageJsonPaths />
</component>
<component name="ProjectFrameBounds">
<option name="x" value="-7" />
<option name="width" value="974" />
<option name="height" value="1047" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
<manualOrder />
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="Notes" type="b2602c69:ProjectViewProjectNode" />
<item name="Notes" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Notes" type="b2602c69:ProjectViewProjectNode" />
<item name="Notes" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Notes" type="b2602c69:ProjectViewProjectNode" />
<item name="Notes" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="Week1" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Notes" type="b2602c69:ProjectViewProjectNode" />
<item name="Notes" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="Week5" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Notes" type="b2602c69:ProjectViewProjectNode" />
<item name="Notes" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="BinaryTree" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="Notes" type="b2602c69:ProjectViewProjectNode" />
<item name="Notes" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="AVLTree" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="AndroidView" />
<pane id="PackagesPane" />
<pane id="Scope" />
<pane id="Scratches" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/../Labs/Lab 1" />
<property name="project.structure.last.edited" value="Modules" />
<property name="project.structure.proportion" value="0.0" />
<property name="project.structure.side.proportion" value="0.2" />
<property name="settings.editor.selected.configurable" value="preferences.lookFeel" />
</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="C:\Users\barnestr\OneDrive - Milwaukee School of Engineering\Documents\2018-2019\CS 2852\Notes\src\Week1" />
<recent name="C:\Users\barnestr\OneDrive - Milwaukee School of Engineering\Documents\2018-2019\CS 2852\Notes\Week1" />
</key>
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager">
<configuration name="KWSingleLinkedListDriver" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<extension name="coverage" enabled="false" merge="false" runner="idea">
<pattern>
<option name="PATTERN" value="Week1.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="MAIN_CLASS_NAME" value="Week1.KWSingleLinkedListDriver" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="ENABLE_SWING_INSPECTOR" value="false" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<module name="Notes" />
<envs />
</configuration>
<configuration name="StackDriver" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<extension name="coverage" enabled="false" merge="false" runner="idea">
<pattern>
<option name="PATTERN" value="Week5.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="MAIN_CLASS_NAME" value="Week5.StackDriver" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="ENABLE_SWING_INSPECTOR" value="false" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<module name="Notes" />
<envs />
</configuration>
<configuration default="true" type="Applet" factoryName="Applet">
<option name="HEIGHT" value="0" />
<option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
<option name="WIDTH" value="0" />
<module />
</configuration>
<configuration default="true" type="Application" factoryName="Application">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<option name="MAIN_CLASS_NAME" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="ENABLE_SWING_INSPECTOR" value="false" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<module name="" />
<envs />
</configuration>
<configuration default="true" type="JUnit" factoryName="JUnit">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PACKAGE_NAME" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="TEST_OBJECT" value="class" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<envs />
<patterns />
</configuration>
<configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
<module name="" />
<option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
<option name="PROGRAM_PARAMETERS" />
<predefined_log_file id="idea.log" enabled="true" />
</configuration>
<configuration default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
<option name="SHMEM_ADDRESS" value="javadebug" />
<option name="HOST" value="localhost" />
<option name="PORT" value="5005" />
</configuration>
<configuration default="true" type="TestNG" factoryName="TestNG">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="SUITE_NAME" />
<option name="PACKAGE_NAME" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="GROUP_NAME" />
<option name="TEST_OBJECT" value="CLASS" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
<option name="OUTPUT_DIRECTORY" />
<option name="ANNOTATION_TYPE" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<option name="USE_DEFAULT_REPORTERS" value="false" />
<option name="PROPERTIES_FILE" />
<envs />
<properties />
<listeners />
</configuration>
<list size="2">
<item index="0" class="java.lang.String" itemvalue="Application.StackDriver" />
<item index="1" class="java.lang.String" itemvalue="Application.KWSingleLinkedListDriver" />
</list>
<recent_temporary>
<list size="2">
<item index="0" class="java.lang.String" itemvalue="Application.KWSingleLinkedListDriver" />
<item index="1" class="java.lang.String" itemvalue="Application.StackDriver" />
</list>
</recent_temporary>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="3061cf10-6d09-4e66-8724-d942d37683f7" name="Default" comment="" />
<created>1536329402133</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1536329402133</updated>
<workItem from="1536329406196" duration="10263000" />
<workItem from="1537207901980" duration="7820000" />
<workItem from="1537837793551" duration="919000" />
<workItem from="1537927749269" duration="1041000" />
<workItem from="1537970634864" duration="1579000" />
<workItem from="1538139243509" duration="1117000" />
<workItem from="1538402471987" duration="2507000" />
<workItem from="1538428491695" duration="4173000" />
<workItem from="1538525817370" duration="21000" />
<workItem from="1538577116146" duration="1127000" />
<workItem from="1539007574253" duration="1471000" />
<workItem from="1539353693855" duration="2816000" />
<workItem from="1539623043712" duration="48000" />
<workItem from="1541373115098" duration="5287000" />
<workItem from="1542116291842" duration="451000" />
<workItem from="1542404395691" duration="81000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="40721000" />
</component>
<component name="ToolWindowManager">
<frame x="-7" y="0" width="974" height="1047" extended-state="0" />
<editor active="true" />
<layout>
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32976446" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="CheckStyle" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.29749477" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32979852" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="3" />
</breakpoint-manager>
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/Week5/KMStack.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="23" column="0" lean-forward="false" selection-start-line="23" selection-start-column="0" selection-end-line="23" selection-end-column="0" />
<folding>
<element signature="e#178#179#0" expanded="true" />
<element signature="e#216#217#0" expanded="true" />
<element signature="e#258#259#0" expanded="true" />
<element signature="e#295#296#0" expanded="true" />
<element signature="e#329#330#0" expanded="true" />
<element signature="e#377#378#0" expanded="true" />
<marker date="1538432048000" expanded="true" signature="509:515" ph=" }" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/AdapterStack.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="136">
<caret line="8" column="8" lean-forward="false" selection-start-line="8" selection-start-column="8" selection-end-line="8" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="782">
<caret line="48" column="25" lean-forward="false" selection-start-line="48" selection-start-column="25" selection-end-line="48" selection-end-column="25" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/Recursion.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="425">
<caret line="28" column="15" lean-forward="false" selection-start-line="28" selection-start-column="15" selection-end-line="28" selection-end-column="15" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3536">
<caret line="214" column="6" lean-forward="false" selection-start-line="214" selection-start-column="6" selection-end-line="214" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/KMStack.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="23" column="0" lean-forward="false" selection-start-line="23" selection-start-column="0" selection-end-line="23" selection-end-column="0" />
<folding>
<element signature="e#178#179#0" expanded="true" />
<element signature="e#216#217#0" expanded="true" />
<element signature="e#258#259#0" expanded="true" />
<element signature="e#295#296#0" expanded="true" />
<element signature="e#329#330#0" expanded="true" />
<element signature="e#377#378#0" expanded="true" />
<marker date="1538432048000" expanded="true" signature="509:515" ph=" }" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/AdapterStack.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="136">
<caret line="8" column="6" lean-forward="false" selection-start-line="8" selection-start-column="6" selection-end-line="8" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="782">
<caret line="48" column="25" lean-forward="false" selection-start-line="48" selection-start-column="25" selection-end-line="48" selection-end-column="25" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/StackDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="4" column="8" lean-forward="false" selection-start-line="4" selection-start-column="8" selection-end-line="4" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3536">
<caret line="214" column="6" lean-forward="false" selection-start-line="214" selection-start-column="6" selection-end-line="214" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/KMStack.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="23" column="0" lean-forward="false" selection-start-line="23" selection-start-column="0" selection-end-line="23" selection-end-column="0" />
<folding>
<element signature="e#178#179#0" expanded="true" />
<element signature="e#216#217#0" expanded="true" />
<element signature="e#258#259#0" expanded="true" />
<element signature="e#295#296#0" expanded="true" />
<element signature="e#329#330#0" expanded="true" />
<element signature="e#377#378#0" expanded="true" />
<marker date="1538432048000" expanded="true" signature="509:515" ph=" }" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/AdapterStack.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="136">
<caret line="8" column="6" lean-forward="false" selection-start-line="8" selection-start-column="6" selection-end-line="8" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="782">
<caret line="48" column="25" lean-forward="false" selection-start-line="48" selection-start-column="25" selection-end-line="48" selection-end-column="25" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/StackDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="4" column="8" lean-forward="false" selection-start-line="4" selection-start-column="8" selection-end-line="4" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3570">
<caret line="210" column="6" lean-forward="true" selection-start-line="204" selection-start-column="4" selection-end-line="212" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="765">
<caret line="47" column="25" lean-forward="true" selection-start-line="47" selection-start-column="25" selection-end-line="47" selection-end-column="25" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3468">
<caret line="210" column="9" lean-forward="true" selection-start-line="204" selection-start-column="4" selection-end-line="212" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/Exam1Review.java" />
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="476">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="799">
<caret line="47" column="30" lean-forward="false" selection-start-line="47" selection-start-column="30" selection-end-line="47" selection-end-column="30" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1292">
<caret line="82" column="0" lean-forward="false" selection-start-line="82" selection-start-column="0" selection-end-line="82" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="935">
<caret line="57" column="5" lean-forward="false" selection-start-line="57" selection-start-column="5" selection-end-line="57" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/Exam1Review.java" />
<entry file="file://$PROJECT_DIR$/src/Week1/KWArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="935">
<caret line="57" column="5" lean-forward="false" selection-start-line="57" selection-start-column="5" selection-end-line="57" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="476">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="935">
<caret line="57" column="5" lean-forward="false" selection-start-line="57" selection-start-column="5" selection-end-line="57" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2040">
<caret line="126" column="29" lean-forward="false" selection-start-line="126" selection-start-column="29" selection-end-line="126" selection-end-column="29" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="935">
<caret line="57" column="5" lean-forward="false" selection-start-line="57" selection-start-column="5" selection-end-line="57" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/Exam1Review.java" />
<entry file="file://$PROJECT_DIR$/src/Week1/KWArrayList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="782">
<caret line="48" column="25" lean-forward="false" selection-start-line="48" selection-start-column="25" selection-end-line="48" selection-end-column="25" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/AdapterStack.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="136">
<caret line="8" column="8" lean-forward="false" selection-start-line="8" selection-start-column="8" selection-end-line="8" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedListDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="28" column="34" lean-forward="false" selection-start-line="28" selection-start-column="34" selection-end-line="28" selection-end-column="34" />
<folding>
<element signature="e#0#807#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/KMStack.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="23" column="0" lean-forward="false" selection-start-line="23" selection-start-column="0" selection-end-line="23" selection-end-column="0" />
<folding>
<element signature="e#178#179#0" expanded="true" />
<element signature="e#216#217#0" expanded="true" />
<element signature="e#258#259#0" expanded="true" />
<element signature="e#295#296#0" expanded="true" />
<element signature="e#329#330#0" expanded="true" />
<element signature="e#377#378#0" expanded="true" />
<marker date="1538432048000" expanded="true" signature="509:515" ph=" }" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/StackDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="4" column="8" lean-forward="false" selection-start-line="4" selection-start-column="8" selection-end-line="4" selection-end-column="8" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week1/KWSingleLinkedList.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3536">
<caret line="214" column="6" lean-forward="false" selection-start-line="214" selection-start-column="6" selection-end-line="214" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week6/BinaryTree.java" />
<entry file="file://$PROJECT_DIR$/src/Week6/ComparableDriver.java" />
<entry file="file://$PROJECT_DIR$/src/Week6/Student.java" />
<entry file="file://$PROJECT_DIR$/src/Week9/AVLTree/Notes.java" />
<entry file="file://$PROJECT_DIR$/src/Week6/BinaryTree/BSTDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="5" column="13" lean-forward="false" selection-start-line="5" selection-start-column="13" selection-end-line="5" selection-end-column="13" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week9/AVLTree/BinarySearchTreeWithRotate.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="12" column="13" lean-forward="false" selection-start-line="12" selection-start-column="13" selection-end-line="12" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week9/AVLTree/AVLTree.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1904">
<caret line="114" column="9" lean-forward="false" selection-start-line="103" selection-start-column="10" selection-end-line="114" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week6/BinaryTree/BinaryTree.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4148">
<caret line="258" column="7" lean-forward="false" selection-start-line="258" selection-start-column="7" selection-end-line="258" selection-end-column="7" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Week5/Recursion.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="442">
<caret line="29" column="5" lean-forward="false" selection-start-line="20" selection-start-column="4" selection-end-line="29" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
<state key="ArtifactsStructureConfigurable.UI">
<settings>
<artifact-editor />
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="FacetStructureConfigurable.UI">
<settings>
<last-edited>No facets are configured</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="GlobalLibrariesConfigurable.UI">
<settings>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="JdkListConfigurable.UI">
<settings>
<last-edited>1.8</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="ModuleStructureConfigurable.UI">
<settings>
<last-edited>Notes</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
<option value="0.6" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="ProjectLibrariesConfigurable.UI">
<settings>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
</states>
</component>
</project>

11
Notes/Notes.iml Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,18 @@
package Week1;
import java.util.Iterator;
import java.util.List;
public class Exam1Review {
private static double findMax(List<Double> listOfDoubles) {
double max = 0.0;
//could also use foreach
Iterator<Double> it = listOfDoubles.iterator();
while(it.hasNext()){
max = Math.max(max,it.next());
}
return max;
}
}

View File

@@ -0,0 +1,84 @@
package Week1;
import java.util.Arrays;
public class KWArrayList<E> {
private static final int INITIAL_CAPACITY = 10;
private static final int GROWTH_FACTOR = 2;
private int size = 0;
private int capacity;
private E[] data;
public KWArrayList() {
capacity = INITIAL_CAPACITY;
data = (E[]) new Object[capacity];
}
public E get(int index) throws IndexOutOfBoundsException{
if(index < 0 || index > size) {
throw new IndexOutOfBoundsException();
}
return data[index];
}
public E set(int index, E newValue) throws IndexOutOfBoundsException{
if(index < 0 || index > size) {
throw new IndexOutOfBoundsException();
}
E oldValue = data[index];
data[index] = newValue;
return oldValue;
}
public int size() {
return this.size;
}
//ArrayList add
public boolean add(E entry) {
if(size == data.length) {
reallocate();
}
data[size] = entry;
size++;
return true;
}
//ArrayList add
public void add(int index, E element) {
if(size == data.length) {
reallocate();
}
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
for(int i = size; i < index; i--) {
data[i] = data [i-1];
}
data[index] = element;
++size;
}
public void reallocate() {
capacity *= GROWTH_FACTOR;
data = Arrays.copyOf(data,capacity);
}
//ArrayList remove
public void remove(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
for(int i = index; i == size; i++) {
data[i] = data [i+1];
}
--size;
}
public void remove(E target) {
for (int i = 0; i > size ; i++) {
if (data[i] == target) {
remove(i);
}
}
}
}

View File

@@ -0,0 +1,236 @@
/*
* CS2852
* Spring 2018
* KWLinkedList
* Name: Sean Jones
* Created: 03/07/2018
*/
package Week1;
/**
* This class implements some of the methods of the Java ArrayList class. It
* does not implement the List interface.
* @param <E> Generic type that will be declared by the user
*/
public class KWSingleLinkedList<E> {
private Node<E> head = null;
private int size = 0;
/**
* Returns the element at the specified index (not LinkedList behavior)
*
* Throws an ArrayIndexOutOfBoundsException on invalid index
*
* @param index The index of the element to be returned
* @return The element stored in the specified index
* @throws ArrayIndexOutOfBoundsException thrown when index is invalid
*/
public E get(int index) throws ArrayIndexOutOfBoundsException {
if(index < 0 || index >= size) {
throw new ArrayIndexOutOfBoundsException(index);
}
Node<E> node = getNode(index);
return node.data;
}
/**
* Sets a specified value at a specified index in the list (not LinkedList behavior)
*
* @param index The index where the new value will be stored
* @param newValue The value to be stored in the specified index
* @return The element previously stored at the specified index
* @throws ArrayIndexOutOfBoundsException thrown when index is invalid
*/
public E set(int index, E newValue) throws ArrayIndexOutOfBoundsException {
if(index < 0 || index >= size) {
throw new ArrayIndexOutOfBoundsException(index);
}
Node<E> node = getNode(index);
E result = node.data;
node.data = newValue;
return result;
}
/**
* Special add method for adding the first Node to the KWSIngleLinkedList.
*
* @param item The element to be added as the head of the list
*/
public void addFirst(E item) {
head = new Node<>(item, head);
size++;
}
/**
* Adds a new Node to a specified index of the KWSingleLinkedList (not LinkedList behavior)
* @param index The index where the element will be added
* @param item The element to be added
* @throws ArrayIndexOutOfBoundsException thrown when index is invalid
*/
public void add(int index, E item) throws ArrayIndexOutOfBoundsException {
if(index < 0 || index > size) {
throw new ArrayIndexOutOfBoundsException(index);
}
if(index == 0) {
addFirst(item);
} else {
Node<E> node = getNode(index - 1);
addAfter(node, item);
}
}
/**
* Adds a new Node at the end of the list
*
* @param item The element to be added to the list
* @return true if the element was successfully added, false otherwise
*/
public boolean add(E item) {
add(size, item);
return true;
}
/**
* Removes a Node from the specified index
* @param index The index of the Node to remove
* @return The element removed from the list
* @throws ArrayIndexOutOfBoundsException thrown when index is invalid
*/
public E remove(int index) throws ArrayIndexOutOfBoundsException {
//TODO
return removeAfter(getNode(index-1));
}
/**
* Returns the size (number of elements) in the list
* @return The number of elements in the list
*/
public int size() {
int s = 0;
while (getNode(s) != null) {
s++;
}
return s;
}
/**
* Returns the index of first instance of a specified element
* @param item The specified element
* @return The index of the first instance of the specified, -1 if not found
*/
public int indexOf(E item) {
// TODO
int index = 0;
while (item != get(index) && index < size()-1) {
index++;
}
if (item == get(index)) {
return index;
} else {
return -1;
}
}
/**
* Returns a String representation of the list, showing the next relationships with
* a "==>"
* @return The String representation of the list.
*/
@Override
public String toString() {
Node<E> node = head;
StringBuilder result = new StringBuilder();
while(node != null) {
result.append(node.data);
if(node.next != null) {
result.append(" ==> ");
}
node = node.next;
}
return result.toString();
}
/*
* Helper method that finds and returns the Node at the specified index
*/
private Node<E> getNode(int index) {
if(index < 0 || index > size) {
throw new ArrayIndexOutOfBoundsException(index);
}
Node<E> node = head;
for(int i = 0; i < index && node != null; i++) {
node = node.next;
}
return node;
}
/*
* Helper method that adds an element after the specified Node. A new Node is
* created, the element is assigned to the new Node, and that Node is set as
* the next Node of the specified Node. The size is then incremented to reflect
* the added Node.
*/
private void addAfter(Node<E> node, E item) {
node.next = new Node<>(item, node.next);
size++;
}
/*
* Helper method that removes the Node that follow (is the next of) a specified
* Node. The specified Node's next is set to it's next Node's next. The size is
* then decremented to reflect the removed Node.
*
* The removed Node is then returned.
*/
private E removeAfter(Node<E> node) {
Node<E> temp = node.next;
if (temp != null) {
node.next = temp.next;
size--;
return temp.data;
} else {
return null;
}
}
/*
* Helper method that removes the head of the list. The head's next Node is
* set as the new head of the list. The size is then decremented to reflect
* the removed Node.
*/
private E removeFirst() {
Node<E> temp = head;
if (head != null) {
size--;
return temp.data;
} else {
return null;
}
}
/*
* A private class that wraps data in a Node object to be referenced by the list. Notice that
* all methods, including constructors are private. Since this is a private class and only
* exists inside the containing class, all private fields and methods are accessible by the
* containing class.
*/
private static class Node<E> {
private E data;
private Node<E> next;
private Node(E dataItem) {
this.data = dataItem;
this.next = null;
}
private Node(E dataItem, Node<E> next) {
this.data = dataItem;
this.next = next;
}
}
}

View File

@@ -0,0 +1,31 @@
/*
* CS2852
* Spring 2018
* KWSingleLinkedList Driver
* Name: Sean Jones
* Created: 03/07/2018
*/
package Week1;
public class KWSingleLinkedListDriver {
public static void main(String[] args) {
KWSingleLinkedList<String> names = new KWSingleLinkedList<>();
names.addFirst("Alice");
names.add("Bob");
names.add("Charlie");
names.add("Diane");
names.add("Elaine");
names.add("Fido");
System.out.println(names);
System.out.println(names.get(3));
System.out.println(names.set(5, "Frank"));
names.add(4, "Ernie");
System.out.println(names);
names.remove(5);
System.out.println(names.size());
System.out.println(names.indexOf("Diane"));
System.out.println(names);
}
}

View File

@@ -0,0 +1,10 @@
package Week5;
import java.util.Stack;
public class AdapterStack<E> {
// Original
private Stack<E> stack = new Stack<>();
// Adapter Methods
//public
}

View File

@@ -0,0 +1,32 @@
package Week5;
import java.util.ArrayList;
import java.util.List;
public class KMStack<E> {
// Backing Structure
List<E> data;
// Constructor
public KMStack() {
data = new ArrayList();
}
// empty
public boolean empty() {
return data.isEmpty();
}
// peek
public E peek() {
return data.get(data.size() - 1);
}
// pop
public E pop() {
E temp = data.get(data.size()-1);
data.remove(data.size()-1);
return temp;
}
//push
public boolean push(E element) {
return data.add(element);
}
}

View File

@@ -0,0 +1,31 @@
package Week5;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class Recursion {
public static void main(String[] args) {
List<Integer> list = new LinkedList<>();
Iterator<Integer> it = list.iterator();
for (int i = 0; i < 10; i++) {
list.add((int)Math.random()* 10 + 1);
}
// size
System.out.println(recursiveSize(it,0));
// search
// greatest common divisor
}
public static int recursiveSize(Iterator<Integer> it, int count) {
// base case
if (!it.hasNext()) {
return count;
}
// recursive call
count++;
it.next();
return recursiveSize(it,count);
}
}

View File

@@ -0,0 +1,20 @@
package Week5;
public class StackDriver {
public static void main(String[] args) {
KMStack<Integer> stack = new KMStack<>();
// test if empty
System.out.println(stack.empty());
// test add
System.out.println(stack.push(5));
System.out.println(stack.empty());
System.out.println(stack.peek());
stack.push(7);
System.out.println(stack.peek());
// test remove
System.out.println(stack.pop());
System.out.println(stack.peek());
}
}

View File

@@ -0,0 +1,36 @@
package Week6.BinaryTree;
import Week6.BinaryTree.BinarySearchTree;
import Week6.BinaryTree.BinaryTree;
public class BSTDriver {
public static void main(String[] args) {
BinarySearchTree<Integer> tree = new BinarySearchTree<>();
tree.add(13);
tree.add(5);
tree.add(18);
tree.add(9);
tree.add(1);
tree.add(17);
tree.add(8);
tree.add(12);
tree.add(3);
tree.add(7);
tree.preOrderTraverse((e, f) -> System.out.println(e));
// Week6.BinaryTree<Integer> tree2 = new Week6.BinaryTree(13,
// new Week6.BinaryTree(new Week6.BinaryTree.Node(5)),
// new Week6.BinaryTree(new Week6.BinaryTree.Node(18)));
// tree.delete(9);
// System.out.println(tree);
// System.out.println(tree.toList());
// System.out.println(tree.size());
// System.out.println(tree.contains(9));
// System.out.println(tree.min());
// System.out.println(tree.max());
// System.out.println(tree.minValue());
// System.out.println(tree2.minValue());
}
}

View File

@@ -0,0 +1,284 @@
package Week6.BinaryTree;
import java.util.ArrayList;
import java.util.List;
/**
* A class to represent a binary search tree.
*
* @param <E> The element type
* @author Koffman and Wolfgang
*/
public class BinarySearchTree<E extends Comparable<E>> extends BinaryTree<E>
implements SearchTree<E> {
// Data Fields
/**
* Return value from the public add method.
*/
protected boolean addReturn;
/**
* Return value from the public delete method.
*/
protected E deleteReturn;
private int size;
/**
* Starter method find.
*
* @param target The Comparable object being sought
* @return The object, if found, otherwise null
*/
@Override
public E find(E target) {
return find(root, target);
}
/**
* Recursive find method.
*
* @param localRoot The local subtree<65>s root
* @param target The object being sought
* @return The object, if found, otherwise null
*/
private E find(Node<E> localRoot, E target) {
if(localRoot == null) {
return null;
}
int result = target.compareTo(localRoot.data);
if(result == 0) {
return localRoot.data;
} else if (result < 0) {
return find(localRoot.left, target);
} else {
return find(localRoot.right, target);
}
}
/**
* Starter method add.
*
* @param item The object being inserted
* @return true if the object is inserted, false if the object already
* exists in the tree
*/
@Override
public boolean add(E item) {
root = add(root, item);
return addReturn;
}
/**
* Recursive add method.
*
* @post The data field addReturn is set true if the item is added to the
* tree, false if the item is already in the tree.
* @param localRoot The local root of the subtree
* @param item The object to be inserted
* @return The new local root that now contains the inserted item
*/
private Node<E> add(Node<E> localRoot, E item) {
if(localRoot == null) {
addReturn = true;
return new Node<>(item);
} else if (item.compareTo(localRoot.data) == 0) {
addReturn = false;
return localRoot;
} else if (item.compareTo(localRoot.data) < 0) {
localRoot.left = add(localRoot.left, item);
return localRoot;
} else {
localRoot.right = add(localRoot.right, item);
return localRoot;
}
}
/**
* Starter method delete.
*
* @post The object is not in the tree.
* @param target The object to be deleted
* @return The object deleted from the tree or null if the object was not in
* the tree
*/
@Override
public E delete(E target) {
root = delete(root, target);
return deleteReturn;
}
/**
* Recursive delete method.
*
* @post The item is not in the tree; deleteReturn is equal to the deleted
* item as it was stored in the tree or null if the item was not found.
* @param localRoot The root of the current subtree
* @param item The item to be deleted
* @return The modified local root that does not contain the item
*/
private Node<E> delete(Node<E> localRoot, E item) {
if(localRoot == null) {
deleteReturn = null;
return localRoot;
}
int result = item.compareTo(localRoot.data);
if(result < 0) {
localRoot.left = delete(localRoot.left, item);
return localRoot;
} else if (result > 0) {
localRoot.right = delete(localRoot.right, item);
return localRoot;
} else {
deleteReturn = localRoot.data;
if(localRoot.left == null) {
return localRoot.right;
} else if (localRoot.right == null) {
return localRoot.left;
} else {
// 2 children
if(localRoot.left.right == null) {
localRoot.data = localRoot.left.data;
localRoot.left = localRoot.left.left;
return localRoot;
} else {
localRoot.data = findLargestChild(localRoot.left);
return localRoot;
}
}
}
}
/**
* Find the node that is the in-order predecessor and replace it with its
* left child (if any).
*
* @post The in-order predecessor is removed from the tree.
* @param parent The parent of possible in-order predecessor (ip)
* @return The data in the ip
*/
private E findLargestChild(Node<E> parent) {
if(parent.right.right == null) {
E returnValue = parent.right.data;
parent.right = parent.right.left;
return returnValue;
} else {
return findLargestChild(parent.right);
}
}
/**
* Removes target from tree.
*
* @param target Item to be removed
* @return true if the object was in the tree, false otherwise
* @post target is not in the tree
*/
@Override
public boolean remove(E target) {
return delete(target) != null;
}
/**
* Determine if an item is in the tree
*
* @param target Item being sought in tree
* @return true If the item is in the tree, false otherwise
* @throws ClassCastException if target is not Comparable
*/
@Override
public boolean contains(E target) {
return find(target) != null;
}
/**
* Find the node that is the in-order successor and replace it with its
* right child (if any).
*
* @post The in-order successor is removed from the tree.
* @param parent The parent of possible in-order successor (is)
* @return The data in the is
*/
private E findSmallestChild(Node<E> parent) {
if(parent.left.left == null) {
E returnValue = parent.left.data;
parent.left = parent.left.right;
return returnValue;
} else {
return findSmallestChild(parent.left);
}
}
/**
* Returns the size of the tree.
* @return the number of nodes with non-null data in the tree
*/
public int size() {
size = 0;
inOrderTraverse((e, d) -> { if (e != null) {
++size;
}
});
return size;
}
public E minValue() {
return minimum(root);
}
private E minimum(Node<E> node) {
if(node == null) {
return null;
}
if(node.left == null) {
return node.data;
}
return minimum(node.left);
}
/**
* Returns the smallest data value contained in the tree
* @return The smallest value
*/
public E min() {
return findSmallestChild(root);
}
/**
* Returns the largest data value contained in the tree
* @return The largest value
*/
public E max() {
return findLargestChild(root);
}
/**
* Return the contents of the BinarySearchTree as a List of items in
* ascending order. (Note the exercise suggests returning a string of item
* separated by newline characters, but a List is more general and useful
* for the testing performed by the exercise. Also, the toString method of
* the Week6.BinaryTree class would be hidden and it is useful to verify some of
* the tests.
*
* @return A list containing the contents of the binary search tree
*/
@Override
public List<E> toList() {
List<E> result = new ArrayList<>();
inOrderTraverse((e, d)-> {
if(e != null) {
result.add(e);
}
});
return result;
}
/**
* Empty this BinarySearchTree
*/
public void clear() {
root = null;
}
}

View File

@@ -0,0 +1,273 @@
package Week6.BinaryTree;
import java.io.Serializable;
import java.util.Scanner;
import java.util.function.BiConsumer;
/**
* Class for a binary tree that stores type E objects.
*
* @param <E> The element type
* @author Koffman and Wolfgang
*
*/
public class BinaryTree<E extends Comparable<E>> implements Serializable {
/**
* Class to encapsulate a tree node.
*
* @param <E> The element type
*/
protected static class Node<E extends Comparable<E>> implements Serializable {
// Data Fields
/**
* The information stored in this node.
*/
public E data;
/**
* Reference to the left child.
*/
public Node<E> left;
/**
* Reference to the right child.
*/
public Node<E> right;
// Constructors
/**
* Construct a node with given data and no children.
*
* @param data The data to store in this node
*/
public Node(E data) {
this.data = data;
left = null;
right = null;
}
// Methods
/**
* Returns a string representation of the node.
*
* @return A string representation of the data fields
*/
@Override
public String toString() {
return data.toString();
}
}
// Data Field
/**
* The root of the binary tree
*/
protected Node<E> root;
/**
* Construct an empty Week6.BinaryTree
*/
public BinaryTree() {
this.root = null;
}
/**
* Construct a Week6.BinaryTree with a specified root. Should only be used by
* subclasses.
*
* @param root The node that is the root of the tree.
*/
protected BinaryTree(Node<E> root) {
this.root = root;
}
/**
* Constructs a new binary tree with data in its root,leftTree as its left
* subtree and rightTree as its right subtree.
*
* @param data The data item to store in the root
* @param leftTree the left child
* @param rightTree the right child
*/
public BinaryTree(E data, BinaryTree<E> leftTree,
BinaryTree<E> rightTree) {
root = new Node<E>(data);
if (leftTree != null) {
this.root.left = leftTree.root;
} else {
this.root.left = null;
}
if (rightTree != null) {
this.root.right = rightTree.root;
} else {
this.root.right = null;
}
}
/**
* Return the left subtree.
*
* @return The left subtree or null if either the root or the left subtree
* is null
*/
public BinaryTree<E> getLeftSubtree() {
if (this.root != null && this.root.left != null) {
return new BinaryTree<E>(this.root.left);
} else {
return null;
}
}
/**
* Return the right sub-tree
*
* @return the right sub-tree or null if either the root or the right
* subtree is null.
*/
public BinaryTree<E> getRightSubtree() {
if (this.root != null && this.root.right != null) {
return new BinaryTree<E>(this.root.right);
} else {
return null;
}
}
/**
* Return the data field of the root
*
* @return the data field of the root or null if the root is null
*/
public E getData() {
if (this.root != null) {
return root.data;
} else {
return null;
}
}
/**
* Determine whether this tree is a leaf.
*
* @return true if the root has no children
*/
public boolean isLeaf() {
return this.root == null || this.root.left == null
&& this.root.right == null;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
inOrderTraverse((e, d) -> {
for (int i = 1; i < d; i++) {
sb.append(" ");
}
sb.append(e);
sb.append("\n");
});
return sb.toString();
}
/*<listing chapter="6" section="4">
/**
* Starter method for preorder traversal
* @param consumer an object that instantiates the BiConsumer interface.
* Its method implements the abstract method apply.
*/
public void preOrderTraverse(BiConsumer<E, Integer> consumer) {
preOrderTraverse(root, 1, consumer);
}
/**
* Performs a recursive pre-order traversal of the tree,
* applying the action specified in the consumer object.
* @param node The local root
* @param depth The depth
* @param consumer object whose accept method specifies the action
* to be performed on each node.
*/
private void preOrderTraverse(Node<E> node, int depth,
BiConsumer<E, Integer> consumer) {
if(node == null) {
consumer.accept(null, depth);
} else {
consumer.accept(node.data, depth);
preOrderTraverse(node.left, depth + 1, consumer);
preOrderTraverse(node.right, depth + 1, consumer);
}
}
/**
* Starter method for inorder traversal
* @param consumer an object that instantiates the BiConsumer interface.
* Its method implements the abstract method apply.
*/
public void inOrderTraverse(BiConsumer<E, Integer> consumer) {
inOrderTraverse(root, 1, consumer);
}
/**
* Performs a recursive inorder traversal of the tree,
* applying the action specified in the consumer object.
* @param node The local root
* @param depth The depth
* @param consumer object whose accept method specifies the action
* to be performed on each node.
*/
private void inOrderTraverse(Node<E> node, int depth,
BiConsumer<E, Integer> consumer) {
if(node == null) {
consumer.accept(null, depth);
} else {
inOrderTraverse(node.left, depth + 1, consumer);
consumer.accept(node.data, depth);
inOrderTraverse(node.right, depth + 1, consumer);
}
}
public E minValue() {
return minimum(root);
}
private E minimum(Node<E> node) {
if(node == null) {
return null;
}
E min = node.data;
E left = null;
E right = null;
if(node.left != null) {
left = minimum(node.left);
}
if(node.right != null) {
right = minimum(node.right);
}
if(left != null && left.compareTo(min) < 0) {
return left;
}
if(right != null && right.compareTo(min) < 0) {
return right;
}
return min;
}
/**
* Method to read a binary tree.
*
* @pre The input consists of a pre-order traversal of the binary tree. The
* line "null" indicates a null tree.
* @param scan the Scanner attached to the input file
* @return The binary tree
*/
public static BinaryTree<String> readBinaryTree(Scanner scan) {
// Read a line and trim leading and trailing spaces.
//TODO
return null;
}
}
/*</listing>*/

View File

@@ -0,0 +1,72 @@
package Week6.BinaryTree;
import java.util.List;
/**
* Interface to define a search tree
*
* @param <E> The element type
* @author Koffman and Wolfgang
*
*/
public interface SearchTree<E extends Comparable<E>> {
/**
* Inserts item where it belongs in the tree.
*
* @param item The item to be inserted
* @return true If the item is inserted, false if the item was already in
* the tree.
*/
boolean add(E item);
/**
* Determine if an item is in the tree
*
* @param target Item being sought in tree
* @return true If the item is in the tree, false otherwise
*/
boolean contains(E target);
/**
* Find an object in the tree
*
* @param target The item being sought
* @return A reference to the object in the tree that compares equal as
* determined by compareTo to the target. If not found null is returned.
*/
E find(E target);
/**
* Removes target from tree.
*
* @param target Item to be removed
* @return A reference to the object in the tree that compares equal as
* determined by compareTo to the target. If not found null is returned.
* @post target is not in the tree
*/
E delete(E target);
/**
* Removes target from tree.
*
* @param target Item to be removed
* @return true if the object was in the tree, false otherwise
* @post target is not in the tree
*/
boolean remove(E target);
/**
* Return a list containing the contents of the search tree in ascending
* order.
*
* @return a list containing the contents of the search tree in ascending
* order.
*/
List<E> toList();
/**
* Empty this SearchTree
*/
void clear();
}

View File

@@ -0,0 +1,491 @@
package Week9.AVLTree;
/**
* Self-balancing binary search tree using the algorithm defined
* by Adelson-Velskii and Landis.
* @param <E> The element type
* @author Koffman and Wolfgang
*/
public class AVLTree<E extends Comparable<E>> extends BinarySearchTreeWithRotate<E> {
// Insert nested class AVLNode<E> here.
/** Class to represent an AVL Node. It extends the
* Week6.BinaryTree.Node by adding the balance field.
*/
private static class AVLNode<E extends Comparable<E>> extends Node<E> {
/** Constant to indicate left-heavy */
public static final int LEFT_HEAVY = -1;
/** Constant to indicate balanced */
public static final int BALANCED = 0;
/** Constant to indicate right-heavy */
public static final int RIGHT_HEAVY = 1;
/** balance is right subtree height - left subtree height */
private int balance;
// Methods
/**
* Construct a node with the given item as the data field.
* @param item The data field
*/
public AVLNode(E item) {
super(item);
balance = BALANCED;
}
/**
* Return a string representation of this object.
* The balance value is appended to the contents.
* @return String representation of this object
*/
@Override
public String toString() {
return balance + ": " + super.toString();
}
}
// Data Fields
/** Flag to indicate that height of tree has increased. */
private boolean increase;
/** Flag to indicate that height of tree has decreased */
private boolean decrease;
/*</exercise>*/
// Methods
/**
* add starter method.
* @pre the item to insert implements the Comparable interface.
* @param item The item being inserted.
* @return true if the object is inserted; false
* if the object already exists in the tree
* @throws ClassCastException if item is not Comparable
*/
@Override
public boolean add(E item) {
increase = false;
root = add((AVLNode<E>) root, item);
return addReturn;
}
/**
* Recursive add method. Inserts the given object into the tree.
* @post addReturn is set true if the item is inserted,
* false if the item is already in the tree.
* @param localRoot The local root of the subtree
* @param item The object to be inserted
* @return The new local root of the subtree with the item
* inserted
*/
private AVLNode<E> add(AVLNode<E> localRoot, E item) {
if (localRoot == null) {
addReturn = true;
increase = true;
return new AVLNode<>(item);
}
if (item.compareTo(localRoot.data) == 0) {
// Item is already in the tree.
increase = false;
addReturn = false;
return localRoot;
} else if (item.compareTo(localRoot.data) < 0) {
// item < data
localRoot.left = add((AVLNode<E>) localRoot.left, item);
if (increase) {
decrementBalance(localRoot);
if (localRoot.balance < AVLNode.LEFT_HEAVY) {
increase = false;
return rebalanceLeft(localRoot);
}
}
return localRoot; // Rebalance not needed.
} else { // item > data
//TODO: Implement case where item.compareTo(localRoot.data) > 0
localRoot.right = add((AVLNode<E>) localRoot.right, item);
if (decrease) {
incrementBalance(localRoot);
if (localRoot.balance < AVLNode.RIGHT_HEAVY) {
decrease = false;
return rebalanceRight(localRoot);
}
}
return localRoot;
}
}
/**
* Method to rebalance left.
* @pre localRoot is the root of an AVL subtree that is
* critically left-heavy.
* @post Balance is restored.
* @param localRoot Root of the AVL subtree
* that needs rebalancing
* @return a new localRoot
*/
private AVLNode<E> rebalanceLeft(AVLNode<E> localRoot) {
// Obtain reference to left child.
AVLNode<E> leftChild = (AVLNode<E>) localRoot.left;
// See whether left-right heavy.
if (leftChild.balance > AVLNode.BALANCED) {
// Obtain reference to left-right child.
AVLNode<E> leftRightChild = (AVLNode<E>) leftChild.right;
// Adjust the balances to be their new values after
// the rotations are performed.
if (leftRightChild.balance < AVLNode.BALANCED) {
leftChild.balance = AVLNode.LEFT_HEAVY;
leftRightChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
} else if (leftRightChild.balance > AVLNode.BALANCED) {
leftChild.balance = AVLNode.BALANCED;
leftRightChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.RIGHT_HEAVY;
} else {
leftChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
}
// Perform left rotation.
localRoot.left = rotateLeft(leftChild);
} else { //Left-Left case
// In this case the leftChild (the new root)
// and the root (new right child) will both be balanced
// after the rotation.
leftChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
}
// Now rotate the local root right.
return (AVLNode<E>) rotateRight(localRoot);
}
/*</listing>*/
/**
* Method to rebalance right.
* @pre localRoot is the root of an AVL subtree that is
* critically right-heavy.
* @post Balance is restored.
* @param localRoot Root of the AVL subtree
* that needs rebalancing
* @return a new localRoot
*/
private AVLNode<E> rebalanceRight(AVLNode<E> localRoot) {
AVLNode<E> rightChild = (AVLNode<E>) localRoot.right;
if (rightChild.balance < AVLNode.BALANCED) {
AVLNode<E> rightLeftChild = (AVLNode<E>) rightChild.left;
if (rightLeftChild.balance > AVLNode.BALANCED) {
rightChild.balance = AVLNode.RIGHT_HEAVY;
rightLeftChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
} else if (rightLeftChild.balance < AVLNode.BALANCED) {
rightChild.balance = AVLNode.BALANCED;
rightLeftChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.LEFT_HEAVY;
} else {
rightChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
}
localRoot.right = rotateRight(rightChild);
} else {
rightChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
}
return (AVLNode<E>) rotateLeft(localRoot);
}
/**
* Method to decrement the balance field and to reset the value of
* increase.
* @pre The balance field was correct prior to an insertion [or
* removal,] and an item is either been added to the left[
* or removed from the right].
* @post The balance is decremented and the increase flags is set
* to false if the overall height of this subtree has not
* changed.
* @param node The AVL node whose balance is to be incremented
*/
private void decrementBalance(AVLNode<E> node) {
// Decrement the balance.
node.balance--;
if (node.balance == AVLNode.BALANCED) {
// If now balanced, overall height has not increased.
increase = false;
}
}
/**
* Method to increment the balance field and to reset the value of
* increase.
* @pre The balance field was correct prior to an insertion [or
* removal,] and an item is either been added to the right[ or removed
* from the left].
* @post The balance is incremented and the increase flags is set to
* false if the overall height of this subtree has not changed.
* @param node The AVL node whose balance is to be incremented
*/
private void incrementBalance(AVLNode<E> node) {
node.balance++;
if (node.balance == AVLNode.BALANCED) {
decrease = false;
}
}
/**
* Delete starter method. Removes the given object
* from the AVL tree.
* @post The object is not in the tree
* @param item - The object to be removed.
* @return The object from the tree that was removed
* or null if the object was not in the tree.
*/
@Override
public E delete(E item) {
decrease = false;
root = delete((AVLNode<E>) root, item);
return deleteReturn;
}
/**
* Recursive delete method. Removes the given object
* from the AVL tree.
* @post The object is not in the tree and removeReturn
* is set to the object that was removed, otherwise
* it is set false.
* @param localRoot The root of the local subtree
* @param item The item to be removed
* @return The new root of the local subtree with the item
* removed.
*/
private AVLNode<E> delete(AVLNode<E> localRoot, E item) {
if (localRoot == null) { // item is not in tree
deleteReturn = null;
return localRoot;
}
if (item.compareTo(localRoot.data) == 0) {
// item is in the tree -- need to remove it
deleteReturn = localRoot.data;
return findReplacementNode(localRoot);
} else if (item.compareTo(localRoot.data) < 0) {
// item is < localRoot.data
localRoot.left = delete((AVLNode<E>) localRoot.left, item);
if (decrease) {
incrementBalance(localRoot);
if (localRoot.balance > AVLNode.RIGHT_HEAVY) {
return rebalanceRightL(localRoot);
} else {
return localRoot;
}
} else {
return localRoot;
}
} else {
// item is > localRoot.data
localRoot.right = delete((AVLNode<E>) localRoot.right, item);
if (decrease) {
decrementBalance(localRoot);
if (localRoot.balance < AVLNode.LEFT_HEAVY) {
return rebalanceLeftR(localRoot);
} else {
return localRoot;
}
} else {
return localRoot;
}
}
}
/**
* Function to find a replacement for a node that is being
* deleted from a binary search tree. If the node has a null
* child, then the replacement is the other child. If neither
* are null, then the replacement is the largest value less
* than the item being removed.
* @pre node is not null
* @post a node is deleted from the tree
* @param node The node to be deleted or replaced
* @return null if both of node's children are null
* node.left if node.right is null
* node.right if node.left is null
* modified copy of node with its data field changed
*/
private AVLNode<E> findReplacementNode(AVLNode<E> node) {
if (node.left == null) {
decrease = true;
return (AVLNode<E>) node.right;
} else if (node.right == null) {
decrease = true;
return (AVLNode<E>) node.left;
} else {
if (node.left.right == null) {
node.data = node.left.data;
node.left = node.left.left;
incrementBalance(node);
return node;
} else {
node.data = findLargestChild((AVLNode<E>) node.left);
if (((AVLNode<E>) node.left).balance < AVLNode.LEFT_HEAVY) {
node.left = rebalanceLeft((AVLNode<E>) node.left);
}
if (decrease) {
incrementBalance(node);
}
return node;
}
}
}
/**
* Find the node such that parent.right.right == null
* @post The found node is removed from the tree and replaced
* by its left child (if any)
* @param parent - The possible parent
* @return the value of the found node
*/
private E findLargestChild(AVLNode<E> parent) {
if (parent.right.right == null) {
E returnValue = parent.right.data;
parent.right = parent.right.left;
decrementBalance(parent);
return returnValue;
} else {
E returnValue = findLargestChild((AVLNode<E>) parent.right);
if (((AVLNode<E>) parent.right).balance < AVLNode.LEFT_HEAVY) {
parent.right = rebalanceLeft((AVLNode<E>) parent.right);
}
if (decrease) {
decrementBalance(parent);
}
return returnValue;
}
}
/**
* Rebalance Left with support for deletion
* @pre localRoot is the root of an AVL subtree that is
* more than one left heavy.
* @post balance is restored and increase and decrease
* are updated as required
* @param localRoot Root of the AVL subtree that needs rebalancing
* @return a new localRoot
*/
private AVLNode<E> rebalanceLeftR(AVLNode<E> localRoot) {
// Obtain reference to left child
AVLNode<E> leftChild = (AVLNode<E>) localRoot.left;
// See if left-right heavy
if (leftChild.balance > AVLNode.BALANCED) {
// Obtain reference to left-right child
AVLNode<E> leftRightChild = (AVLNode<E>) leftChild.right;
// Adjust the balances to be their new values after
// the rotates are performed.
if (leftRightChild.balance < AVLNode.BALANCED) {
leftChild.balance = AVLNode.LEFT_HEAVY;
leftRightChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
} else if (leftRightChild.balance > AVLNode.BALANCED) {
leftChild.balance = AVLNode.BALANCED;
leftRightChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.RIGHT_HEAVY;
} else {
leftChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
}
// After the rotates the overall height will be
// reduced thus increase is now false, but
// decrease is now true.
increase = false;
decrease = true;
// Perform double rotation
localRoot.left = rotateLeft(leftChild);
return (AVLNode<E>) rotateRight(localRoot);
}
if (leftChild.balance < AVLNode.BALANCED) {
// In this case both the leftChild (the new root)
// and the root (new right child) will both be balanced
// after the rotate. Also the overall height will be
// reduced, thus increase will be false, but decrease
// will be true.
leftChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
increase = false;
decrease = true;
} else {
// After the rotate the leftChild (new root) will
// be right heavy, and the local root (new right child)
// will be left heavy. The overall height of the tree
// will not change, thus increase and decrease remain
// unchanged.
leftChild.balance = AVLNode.RIGHT_HEAVY;
localRoot.balance = AVLNode.LEFT_HEAVY;
}
// Now rotate the
return (AVLNode<E>) rotateRight(localRoot);
}
/**
* Rebalance Right with support for deletion
* @pre localRoot is the root of an AVL subtree that is
* more than one right heavy.
* @post balance is restored and increase is set false
* @param localRoot Root of the AVL subtree that needs rebalancing
* @return a new localRoot
*/
private AVLNode<E> rebalanceRightL(AVLNode<E> localRoot) {
// Obtain reference to right child
AVLNode<E> rightChild = (AVLNode<E>) localRoot.right;
// See if right-left heavy
if (rightChild.balance < AVLNode.BALANCED) {
// Obtain reference to right-left child
AVLNode<E> rightLeftChild = (AVLNode<E>) rightChild.left;
// Adjust the balances to be their new values after
// the rotates are performed.
if (rightLeftChild.balance > AVLNode.BALANCED) {
rightChild.balance = AVLNode.RIGHT_HEAVY;
rightLeftChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
} else if (rightLeftChild.balance < AVLNode.BALANCED) {
rightChild.balance = AVLNode.BALANCED;
rightLeftChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.LEFT_HEAVY;
} else {
rightChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
}
// After the rotates the overall height will be
// reduced thus increase is now false, but
// decrease is now true.
increase = false;
decrease = true;
// Perform double rotation
localRoot.right = rotateRight(rightChild);
return (AVLNode<E>) rotateLeft(localRoot);
}
if (rightChild.balance > AVLNode.BALANCED) {
// In this case both the rightChild (the new root)
// and the root (new left child) will both be balanced
// after the rotate. Also the overall height will be
// reduced, thus increase will be false, but decrease
// will be true.
rightChild.balance = AVLNode.BALANCED;
localRoot.balance = AVLNode.BALANCED;
increase = false;
decrease = true;
} else {
// After the rotate the rightChild (new root) will
// be left heavy, and the local root (new left child)
// will be right heavy. The overall height of the tree
// will not change, thus increase and decrease remain
// unchanged.
rightChild.balance = AVLNode.LEFT_HEAVY;
localRoot.balance = AVLNode.RIGHT_HEAVY;
}
// Now rotate the
return (AVLNode<E>) rotateLeft(localRoot);
}
}

View File

@@ -0,0 +1,51 @@
package Week9.AVLTree;
import Week6.BinaryTree.BinarySearchTree;
/**
* This class extends the BinarySearchTree by adding the rotate
* operations. Rotation will change the balance of a search
* tree while preserving the search tree property.
* Used as a common base class for self-balancing trees.
* @param <E> The element type
* @author Koffman and Wolfgang
*/
public class BinarySearchTreeWithRotate<E extends Comparable<E>> extends BinarySearchTree<E> {
// Methods
/**
* Method to perform a right rotation.
* @pre root is the root of a binary search tree.
* @post root.right is the root of a binary search tree,
* root.right.right is raised one level,
* root.right.left does not change levels,
* root.left is lowered one level,
* the new root is returned.
* @param root The root of the binary tree to be rotated
* @return The new root of the rotated tree
*/
protected Node<E> rotateRight(Node<E> root) {
Node<E> temp = root.left;
root.left = temp.right;
temp.right = root;
return temp;
}
/**
* Method to perform a left rotation (rotateLeft).
* @pre localRoot is the root of a binary search tree
* @post localRoot.right is the root of a binary search tree
* localRoot.right.right is raised one level
* localRoot.right.left does not change levels
* localRoot.left is lowered one level
* the new localRoot is returned.
* @param localRoot The root of the binary tree to be rotated
* @return the new root of the rotated tree
*/
protected Node<E> rotateLeft(Node<E> localRoot) {
Node<E> temp = localRoot.right;
localRoot.right = temp.left;
temp.left = localRoot;
return temp;
}
}