diff --git a/Khalilov_Shokhboz_cw/Khalilov_Shokhboz_cw.odt b/Khalilov_Shokhboz_cw/Khalilov_Shokhboz_cw.odt new file mode 100644 index 0000000..8ad3b2b Binary files /dev/null and b/Khalilov_Shokhboz_cw/Khalilov_Shokhboz_cw.odt differ diff --git a/Khalilov_Shokhboz_cw/Khalilov_Shokhboz_cw.pdf b/Khalilov_Shokhboz_cw/Khalilov_Shokhboz_cw.pdf new file mode 100644 index 0000000..f70c6eb Binary files /dev/null and b/Khalilov_Shokhboz_cw/Khalilov_Shokhboz_cw.pdf differ diff --git a/Khalilov_Shokhboz_cw/RBTree.sh b/Khalilov_Shokhboz_cw/RBTree.sh new file mode 100755 index 0000000..e29d736 --- /dev/null +++ b/Khalilov_Shokhboz_cw/RBTree.sh @@ -0,0 +1,11 @@ +#!/bin/sh +BASE_DIR=$(dirname "$(readlink -f "$0")") +export LD_LIBRARY_PATH="$BASE_DIR"/lib/:"$BASE_DIR":$LD_LIBRARY_PATH +export QML_IMPORT_PATH="$BASE_DIR"/qml/:$QML_IMPORT_PATH +export QML2_IMPORT_PATH="$BASE_DIR"/qml/:$QML2_IMPORT_PATH +export QT_PLUGIN_PATH="$BASE_DIR"/plugins/:$QT_PLUGIN_PATH +export QTWEBENGINEPROCESS_PATH="$BASE_DIR"/bin/QtWebEngineProcess +export QTDIR="$BASE_DIR" +export QT_QPA_PLATFORM_PLUGIN_PATH="$BASE_DIR"/plugins/platforms:$QT_QPA_PLATFORM_PLUGIN_PATH + +"$BASE_DIR/bin/RBTree" "$@" diff --git a/Khalilov_Shokhboz_cw/RBTree.zip b/Khalilov_Shokhboz_cw/RBTree.zip new file mode 100644 index 0000000..a1f63c2 Binary files /dev/null and b/Khalilov_Shokhboz_cw/RBTree.zip differ diff --git a/Khalilov_Shokhboz_cw/bin/RBTree b/Khalilov_Shokhboz_cw/bin/RBTree new file mode 100755 index 0000000..324cea1 Binary files /dev/null and b/Khalilov_Shokhboz_cw/bin/RBTree differ diff --git a/Khalilov_Shokhboz_cw/bin/qt.conf b/Khalilov_Shokhboz_cw/bin/qt.conf new file mode 100755 index 0000000..7fc8a3c --- /dev/null +++ b/Khalilov_Shokhboz_cw/bin/qt.conf @@ -0,0 +1,7 @@ +[Paths] +Prefix= ./../ +Libraries= ./lib/ +Plugins= ./plugins/ +Imports= ./qml/ +Translations= ./translations/ +Qml2Imports= ./qml/ diff --git a/Khalilov_Shokhboz_cw/lib/libQt5Core.so.5 b/Khalilov_Shokhboz_cw/lib/libQt5Core.so.5 new file mode 100755 index 0000000..e7cb3f9 Binary files /dev/null and b/Khalilov_Shokhboz_cw/lib/libQt5Core.so.5 differ diff --git a/Khalilov_Shokhboz_cw/lib/libQt5DBus.so.5 b/Khalilov_Shokhboz_cw/lib/libQt5DBus.so.5 new file mode 100755 index 0000000..919b46d Binary files /dev/null and b/Khalilov_Shokhboz_cw/lib/libQt5DBus.so.5 differ diff --git a/Khalilov_Shokhboz_cw/lib/libQt5Gui.so.5 b/Khalilov_Shokhboz_cw/lib/libQt5Gui.so.5 new file mode 100755 index 0000000..75baf60 Binary files /dev/null and b/Khalilov_Shokhboz_cw/lib/libQt5Gui.so.5 differ diff --git a/Khalilov_Shokhboz_cw/lib/libQt5Widgets.so.5 b/Khalilov_Shokhboz_cw/lib/libQt5Widgets.so.5 new file mode 100755 index 0000000..bd9f203 Binary files /dev/null and b/Khalilov_Shokhboz_cw/lib/libQt5Widgets.so.5 differ diff --git a/Khalilov_Shokhboz_cw/lib/libQt5XcbQpa.so.5 b/Khalilov_Shokhboz_cw/lib/libQt5XcbQpa.so.5 new file mode 100755 index 0000000..5d93828 Binary files /dev/null and b/Khalilov_Shokhboz_cw/lib/libQt5XcbQpa.so.5 differ diff --git a/Khalilov_Shokhboz_cw/lib/libicudata.so.56 b/Khalilov_Shokhboz_cw/lib/libicudata.so.56 new file mode 100755 index 0000000..ce251d8 Binary files /dev/null and b/Khalilov_Shokhboz_cw/lib/libicudata.so.56 differ diff --git a/Khalilov_Shokhboz_cw/lib/libicui18n.so.56 b/Khalilov_Shokhboz_cw/lib/libicui18n.so.56 new file mode 100755 index 0000000..a95c22d Binary files /dev/null and b/Khalilov_Shokhboz_cw/lib/libicui18n.so.56 differ diff --git a/Khalilov_Shokhboz_cw/lib/libicuuc.so.56 b/Khalilov_Shokhboz_cw/lib/libicuuc.so.56 new file mode 100755 index 0000000..7b4e4ac Binary files /dev/null and b/Khalilov_Shokhboz_cw/lib/libicuuc.so.56 differ diff --git a/Khalilov_Shokhboz_cw/plugins/platforms/libqoffscreen.so b/Khalilov_Shokhboz_cw/plugins/platforms/libqoffscreen.so new file mode 100755 index 0000000..7ceb02f Binary files /dev/null and b/Khalilov_Shokhboz_cw/plugins/platforms/libqoffscreen.so differ diff --git a/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-egl.so b/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-egl.so new file mode 100755 index 0000000..3bcaec9 Binary files /dev/null and b/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-egl.so differ diff --git a/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-generic.so b/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-generic.so new file mode 100755 index 0000000..96f1d9b Binary files /dev/null and b/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-generic.so differ diff --git a/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-xcomposite-egl.so b/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-xcomposite-egl.so new file mode 100755 index 0000000..ea80c0d Binary files /dev/null and b/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-xcomposite-egl.so differ diff --git a/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-xcomposite-glx.so b/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-xcomposite-glx.so new file mode 100755 index 0000000..6b997b4 Binary files /dev/null and b/Khalilov_Shokhboz_cw/plugins/platforms/libqwayland-xcomposite-glx.so differ diff --git a/Khalilov_Shokhboz_cw/plugins/platforms/libqxcb.so b/Khalilov_Shokhboz_cw/plugins/platforms/libqxcb.so new file mode 100755 index 0000000..37e62a2 Binary files /dev/null and b/Khalilov_Shokhboz_cw/plugins/platforms/libqxcb.so differ diff --git a/Khalilov_Shokhboz_cw/src/Makefile b/Khalilov_Shokhboz_cw/src/Makefile new file mode 100644 index 0000000..2e6b68e --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/Makefile @@ -0,0 +1,1042 @@ +############################################################################# +# Makefile for building: RBTree +# Generated by qmake (3.1) (Qt 5.15.2) +# Project: RBTree.pro +# Template: app +# Command: /usr/bin/qmake -o Makefile RBTree.pro -Wlogic +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB +CFLAGS = -pipe -O2 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES) +CXXFLAGS = -pipe -O2 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES) +INCPATH = -I. -I/usr/include/qt -I/usr/include/qt/QtWidgets -I/usr/include/qt/QtGui -I/usr/include/qt/QtCore -I. -I/usr/lib/qt/mkspecs/linux-g++ +QMAKE = /usr/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +QINSTALL = /usr/bin/qmake -install qinstall +QINSTALL_PROGRAM = /usr/bin/qmake -install qinstall -exe +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = RBTree1.0.0 +DISTDIR = /home/boss/RBTree/.tmp/RBTree1.0.0 +LINK = g++ +LFLAGS = -Wl,-O1 +LIBS = $(SUBLIBS) /usr/lib/libQt5Widgets.so /usr/lib/libQt5Gui.so /usr/lib/libQt5Core.so -lGL -lpthread +AR = ar cqs +RANLIB = +SED = sed +STRIP = strip + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = documentation.cpp \ + helperfunctions.cpp \ + main.cpp \ + mainwindow.cpp \ + node.cpp qrc_resource.cpp \ + moc_documentation.cpp \ + moc_mainwindow.cpp +OBJECTS = documentation.o \ + helperfunctions.o \ + main.o \ + mainwindow.o \ + node.o \ + qrc_resource.o \ + moc_documentation.o \ + moc_mainwindow.o +DIST = /usr/lib/qt/mkspecs/features/spec_pre.prf \ + /usr/lib/qt/mkspecs/common/unix.conf \ + /usr/lib/qt/mkspecs/common/linux.conf \ + /usr/lib/qt/mkspecs/common/sanitize.conf \ + /usr/lib/qt/mkspecs/common/gcc-base.conf \ + /usr/lib/qt/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/qt/mkspecs/common/g++-base.conf \ + /usr/lib/qt/mkspecs/common/g++-unix.conf \ + /usr/lib/qt/mkspecs/qconfig.pri \ + /usr/lib/qt/mkspecs/modules/qt_AkonadiAgentBase.pri \ + /usr/lib/qt/mkspecs/modules/qt_AkonadiContact.pri \ + /usr/lib/qt/mkspecs/modules/qt_AkonadiCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_AkonadiWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_AkonadiXml.pri \ + /usr/lib/qt/mkspecs/modules/qt_Attica.pri \ + /usr/lib/qt/mkspecs/modules/qt_Baloo.pri \ + /usr/lib/qt/mkspecs/modules/qt_BluezQt.pri \ + /usr/lib/qt/mkspecs/modules/qt_ContactEditor.pri \ + /usr/lib/qt/mkspecs/modules/qt_KActivities.pri \ + /usr/lib/qt/mkspecs/modules/qt_KActivitiesStats.pri \ + /usr/lib/qt/mkspecs/modules/qt_KArchive.pri \ + /usr/lib/qt/mkspecs/modules/qt_KAuth.pri \ + /usr/lib/qt/mkspecs/modules/qt_KAuthCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCalendarCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCddb.pri \ + /usr/lib/qt/mkspecs/modules/qt_KChart.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \ + /usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \ + /usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KContacts.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCrash.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDESu.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri \ + /usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \ + /usr/lib/qt/mkspecs/modules/qt_KFileMetaData.pri \ + /usr/lib/qt/mkspecs/modules/qt_KGantt.pri \ + /usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \ + /usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \ + /usr/lib/qt/mkspecs/modules/qt_KHolidays.pri \ + /usr/lib/qt/mkspecs/modules/qt_KHtml.pri \ + /usr/lib/qt/mkspecs/modules/qt_KI18n.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIOGui.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_Kirigami2.pri \ + /usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \ + /usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \ + /usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KJS.pri \ + /usr/lib/qt/mkspecs/modules/qt_KJSApi.pri \ + /usr/lib/qt/mkspecs/modules/qt_KMime.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \ + /usr/lib/qt/mkspecs/modules/qt_KParts.pri \ + /usr/lib/qt/mkspecs/modules/qt_KPeople.pri \ + /usr/lib/qt/mkspecs/modules/qt_KPeopleWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KPty.pri \ + /usr/lib/qt/mkspecs/modules/qt_KRunner.pri \ + /usr/lib/qt/mkspecs/modules/qt_KScreen.pri \ + /usr/lib/qt/mkspecs/modules/qt_KService.pri \ + /usr/lib/qt/mkspecs/modules/qt_KSyntaxHighlighting.pri \ + /usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri \ + /usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \ + /usr/lib/qt/mkspecs/modules/qt_KUserFeedbackCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KUserFeedbackWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KWallet.pri \ + /usr/lib/qt/mkspecs/modules/qt_KWaylandClient.pri \ + /usr/lib/qt/mkspecs/modules/qt_KWaylandServer.pri \ + /usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \ + /usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \ + /usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3danimation.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3danimation_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dcore.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dcore_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dextras.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dextras_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dinput.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dinput_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dlogic.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dlogic_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquick.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquick_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3drender.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3drender_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_charts.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_charts_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_datavisualization.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_datavisualization_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_help.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_hunspellinputmethod_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_location.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_multimediagsttools_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_pdf.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_pdf_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_positioningquick.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_positioningquick_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_purchasing.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_purchasing_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickshapes_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_script.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \ + /usr/lib/qt/mkspecs/modules/qt_Prison.pri \ + /usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri \ + /usr/lib/qt/mkspecs/modules/qt_Solid.pri \ + /usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \ + /usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri \ + /usr/lib/qt/mkspecs/features/qt_functions.prf \ + /usr/lib/qt/mkspecs/features/qt_config.prf \ + /usr/lib/qt/mkspecs/linux-g++/qmake.conf \ + /usr/lib/qt/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib/qt/mkspecs/features/exclusive_builds.prf \ + /usr/lib/qt/mkspecs/features/toolchain.prf \ + /usr/lib/qt/mkspecs/features/default_pre.prf \ + /usr/lib/qt/mkspecs/features/resolve_config.prf \ + /usr/lib/qt/mkspecs/features/default_post.prf \ + /usr/lib/qt/mkspecs/features/warn_on.prf \ + /usr/lib/qt/mkspecs/features/qt.prf \ + /usr/lib/qt/mkspecs/features/resources_functions.prf \ + /usr/lib/qt/mkspecs/features/resources.prf \ + /usr/lib/qt/mkspecs/features/moc.prf \ + /usr/lib/qt/mkspecs/features/unix/opengl.prf \ + /usr/lib/qt/mkspecs/features/uic.prf \ + /usr/lib/qt/mkspecs/features/unix/thread.prf \ + /usr/lib/qt/mkspecs/features/qmake_use.prf \ + /usr/lib/qt/mkspecs/features/file_copies.prf \ + /usr/lib/qt/mkspecs/features/testcase_targets.prf \ + /usr/lib/qt/mkspecs/features/exceptions.prf \ + /usr/lib/qt/mkspecs/features/yacc.prf \ + /usr/lib/qt/mkspecs/features/lex.prf \ + RBTree.pro documentation.h \ + helperfunctions.h \ + mainwindow.h \ + node.hpp \ + libs.h documentation.cpp \ + helperfunctions.cpp \ + main.cpp \ + mainwindow.cpp \ + node.cpp +QMAKE_TARGET = RBTree +DESTDIR = +TARGET = RBTree + + +first: all +####### Build rules + +RBTree: $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: RBTree.pro /usr/lib/qt/mkspecs/linux-g++/qmake.conf /usr/lib/qt/mkspecs/features/spec_pre.prf \ + /usr/lib/qt/mkspecs/common/unix.conf \ + /usr/lib/qt/mkspecs/common/linux.conf \ + /usr/lib/qt/mkspecs/common/sanitize.conf \ + /usr/lib/qt/mkspecs/common/gcc-base.conf \ + /usr/lib/qt/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/qt/mkspecs/common/g++-base.conf \ + /usr/lib/qt/mkspecs/common/g++-unix.conf \ + /usr/lib/qt/mkspecs/qconfig.pri \ + /usr/lib/qt/mkspecs/modules/qt_AkonadiAgentBase.pri \ + /usr/lib/qt/mkspecs/modules/qt_AkonadiContact.pri \ + /usr/lib/qt/mkspecs/modules/qt_AkonadiCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_AkonadiWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_AkonadiXml.pri \ + /usr/lib/qt/mkspecs/modules/qt_Attica.pri \ + /usr/lib/qt/mkspecs/modules/qt_Baloo.pri \ + /usr/lib/qt/mkspecs/modules/qt_BluezQt.pri \ + /usr/lib/qt/mkspecs/modules/qt_ContactEditor.pri \ + /usr/lib/qt/mkspecs/modules/qt_KActivities.pri \ + /usr/lib/qt/mkspecs/modules/qt_KActivitiesStats.pri \ + /usr/lib/qt/mkspecs/modules/qt_KArchive.pri \ + /usr/lib/qt/mkspecs/modules/qt_KAuth.pri \ + /usr/lib/qt/mkspecs/modules/qt_KAuthCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCalendarCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCddb.pri \ + /usr/lib/qt/mkspecs/modules/qt_KChart.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \ + /usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \ + /usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KContacts.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \ + /usr/lib/qt/mkspecs/modules/qt_KCrash.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDESu.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri \ + /usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \ + /usr/lib/qt/mkspecs/modules/qt_KFileMetaData.pri \ + /usr/lib/qt/mkspecs/modules/qt_KGantt.pri \ + /usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \ + /usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \ + /usr/lib/qt/mkspecs/modules/qt_KHolidays.pri \ + /usr/lib/qt/mkspecs/modules/qt_KHtml.pri \ + /usr/lib/qt/mkspecs/modules/qt_KI18n.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIOGui.pri \ + /usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_Kirigami2.pri \ + /usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \ + /usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \ + /usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KJS.pri \ + /usr/lib/qt/mkspecs/modules/qt_KJSApi.pri \ + /usr/lib/qt/mkspecs/modules/qt_KMime.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \ + /usr/lib/qt/mkspecs/modules/qt_KParts.pri \ + /usr/lib/qt/mkspecs/modules/qt_KPeople.pri \ + /usr/lib/qt/mkspecs/modules/qt_KPeopleWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KPty.pri \ + /usr/lib/qt/mkspecs/modules/qt_KRunner.pri \ + /usr/lib/qt/mkspecs/modules/qt_KScreen.pri \ + /usr/lib/qt/mkspecs/modules/qt_KService.pri \ + /usr/lib/qt/mkspecs/modules/qt_KSyntaxHighlighting.pri \ + /usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri \ + /usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \ + /usr/lib/qt/mkspecs/modules/qt_KUserFeedbackCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_KUserFeedbackWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KWallet.pri \ + /usr/lib/qt/mkspecs/modules/qt_KWaylandClient.pri \ + /usr/lib/qt/mkspecs/modules/qt_KWaylandServer.pri \ + /usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \ + /usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \ + /usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3danimation.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3danimation_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dcore.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dcore_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dextras.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dextras_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dinput.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dinput_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dlogic.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dlogic_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquick.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquick_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3drender.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_3drender_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_charts.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_charts_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_datavisualization.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_datavisualization_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_help.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_hunspellinputmethod_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_location.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_multimediagsttools_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_pdf.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_pdf_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_positioningquick.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_positioningquick_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_purchasing.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_purchasing_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickshapes_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_script.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \ + /usr/lib/qt/mkspecs/modules/qt_Prison.pri \ + /usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri \ + /usr/lib/qt/mkspecs/modules/qt_Solid.pri \ + /usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \ + /usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \ + /usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri \ + /usr/lib/qt/mkspecs/features/qt_functions.prf \ + /usr/lib/qt/mkspecs/features/qt_config.prf \ + /usr/lib/qt/mkspecs/linux-g++/qmake.conf \ + /usr/lib/qt/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib/qt/mkspecs/features/exclusive_builds.prf \ + /usr/lib/qt/mkspecs/features/toolchain.prf \ + /usr/lib/qt/mkspecs/features/default_pre.prf \ + /usr/lib/qt/mkspecs/features/resolve_config.prf \ + /usr/lib/qt/mkspecs/features/default_post.prf \ + /usr/lib/qt/mkspecs/features/warn_on.prf \ + /usr/lib/qt/mkspecs/features/qt.prf \ + /usr/lib/qt/mkspecs/features/resources_functions.prf \ + /usr/lib/qt/mkspecs/features/resources.prf \ + /usr/lib/qt/mkspecs/features/moc.prf \ + /usr/lib/qt/mkspecs/features/unix/opengl.prf \ + /usr/lib/qt/mkspecs/features/uic.prf \ + /usr/lib/qt/mkspecs/features/unix/thread.prf \ + /usr/lib/qt/mkspecs/features/qmake_use.prf \ + /usr/lib/qt/mkspecs/features/file_copies.prf \ + /usr/lib/qt/mkspecs/features/testcase_targets.prf \ + /usr/lib/qt/mkspecs/features/exceptions.prf \ + /usr/lib/qt/mkspecs/features/yacc.prf \ + /usr/lib/qt/mkspecs/features/lex.prf \ + RBTree.pro \ + resource.qrc + $(QMAKE) -o Makefile RBTree.pro -Wlogic +/usr/lib/qt/mkspecs/features/spec_pre.prf: +/usr/lib/qt/mkspecs/common/unix.conf: +/usr/lib/qt/mkspecs/common/linux.conf: +/usr/lib/qt/mkspecs/common/sanitize.conf: +/usr/lib/qt/mkspecs/common/gcc-base.conf: +/usr/lib/qt/mkspecs/common/gcc-base-unix.conf: +/usr/lib/qt/mkspecs/common/g++-base.conf: +/usr/lib/qt/mkspecs/common/g++-unix.conf: +/usr/lib/qt/mkspecs/qconfig.pri: +/usr/lib/qt/mkspecs/modules/qt_AkonadiAgentBase.pri: +/usr/lib/qt/mkspecs/modules/qt_AkonadiContact.pri: +/usr/lib/qt/mkspecs/modules/qt_AkonadiCore.pri: +/usr/lib/qt/mkspecs/modules/qt_AkonadiWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_AkonadiXml.pri: +/usr/lib/qt/mkspecs/modules/qt_Attica.pri: +/usr/lib/qt/mkspecs/modules/qt_Baloo.pri: +/usr/lib/qt/mkspecs/modules/qt_BluezQt.pri: +/usr/lib/qt/mkspecs/modules/qt_ContactEditor.pri: +/usr/lib/qt/mkspecs/modules/qt_KActivities.pri: +/usr/lib/qt/mkspecs/modules/qt_KActivitiesStats.pri: +/usr/lib/qt/mkspecs/modules/qt_KArchive.pri: +/usr/lib/qt/mkspecs/modules/qt_KAuth.pri: +/usr/lib/qt/mkspecs/modules/qt_KAuthCore.pri: +/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri: +/usr/lib/qt/mkspecs/modules/qt_KCalendarCore.pri: +/usr/lib/qt/mkspecs/modules/qt_KCddb.pri: +/usr/lib/qt/mkspecs/modules/qt_KChart.pri: +/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri: +/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri: +/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri: +/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri: +/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri: +/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_KContacts.pri: +/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri: +/usr/lib/qt/mkspecs/modules/qt_KCrash.pri: +/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri: +/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri: +/usr/lib/qt/mkspecs/modules/qt_KDESu.pri: +/usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri: +/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri: +/usr/lib/qt/mkspecs/modules/qt_KFileMetaData.pri: +/usr/lib/qt/mkspecs/modules/qt_KGantt.pri: +/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri: +/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri: +/usr/lib/qt/mkspecs/modules/qt_KHolidays.pri: +/usr/lib/qt/mkspecs/modules/qt_KHtml.pri: +/usr/lib/qt/mkspecs/modules/qt_KI18n.pri: +/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri: +/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri: +/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri: +/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_KIOGui.pri: +/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_Kirigami2.pri: +/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri: +/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri: +/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_KJS.pri: +/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri: +/usr/lib/qt/mkspecs/modules/qt_KMime.pri: +/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri: +/usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri: +/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri: +/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri: +/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri: +/usr/lib/qt/mkspecs/modules/qt_KParts.pri: +/usr/lib/qt/mkspecs/modules/qt_KPeople.pri: +/usr/lib/qt/mkspecs/modules/qt_KPeopleWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_KPty.pri: +/usr/lib/qt/mkspecs/modules/qt_KRunner.pri: +/usr/lib/qt/mkspecs/modules/qt_KScreen.pri: +/usr/lib/qt/mkspecs/modules/qt_KService.pri: +/usr/lib/qt/mkspecs/modules/qt_KSyntaxHighlighting.pri: +/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri: +/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri: +/usr/lib/qt/mkspecs/modules/qt_KUserFeedbackCore.pri: +/usr/lib/qt/mkspecs/modules/qt_KUserFeedbackWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_KWallet.pri: +/usr/lib/qt/mkspecs/modules/qt_KWaylandClient.pri: +/usr/lib/qt/mkspecs/modules/qt_KWaylandServer.pri: +/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri: +/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri: +/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3danimation.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3danimation_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dcore.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dcore_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dextras.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dextras_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dinput.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dinput_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquick.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquick_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3drender.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_3drender_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_charts.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_charts_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_core.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_edid_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_help.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_hunspellinputmethod_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_kms_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_location.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_multimediagsttools_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_network.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_pdf.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_pdf_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_purchasing.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_purchasing_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quickshapes_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_script.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_vulkan_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_xkbcommon_support_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri: +/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri: +/usr/lib/qt/mkspecs/modules/qt_Prison.pri: +/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri: +/usr/lib/qt/mkspecs/modules/qt_Solid.pri: +/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri: +/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri: +/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri: +/usr/lib/qt/mkspecs/features/qt_functions.prf: +/usr/lib/qt/mkspecs/features/qt_config.prf: +/usr/lib/qt/mkspecs/linux-g++/qmake.conf: +/usr/lib/qt/mkspecs/features/spec_post.prf: +.qmake.stash: +/usr/lib/qt/mkspecs/features/exclusive_builds.prf: +/usr/lib/qt/mkspecs/features/toolchain.prf: +/usr/lib/qt/mkspecs/features/default_pre.prf: +/usr/lib/qt/mkspecs/features/resolve_config.prf: +/usr/lib/qt/mkspecs/features/default_post.prf: +/usr/lib/qt/mkspecs/features/warn_on.prf: +/usr/lib/qt/mkspecs/features/qt.prf: +/usr/lib/qt/mkspecs/features/resources_functions.prf: +/usr/lib/qt/mkspecs/features/resources.prf: +/usr/lib/qt/mkspecs/features/moc.prf: +/usr/lib/qt/mkspecs/features/unix/opengl.prf: +/usr/lib/qt/mkspecs/features/uic.prf: +/usr/lib/qt/mkspecs/features/unix/thread.prf: +/usr/lib/qt/mkspecs/features/qmake_use.prf: +/usr/lib/qt/mkspecs/features/file_copies.prf: +/usr/lib/qt/mkspecs/features/testcase_targets.prf: +/usr/lib/qt/mkspecs/features/exceptions.prf: +/usr/lib/qt/mkspecs/features/yacc.prf: +/usr/lib/qt/mkspecs/features/lex.prf: +RBTree.pro: +resource.qrc: +qmake: FORCE + @$(QMAKE) -o Makefile RBTree.pro -Wlogic + +qmake_all: FORCE + + +all: Makefile RBTree + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ + $(COPY_FILE) --parents resource.qrc $(DISTDIR)/ + $(COPY_FILE) --parents /usr/lib/qt/mkspecs/features/data/dummy.cpp $(DISTDIR)/ + $(COPY_FILE) --parents documentation.h helperfunctions.h mainwindow.h node.hpp libs.h $(DISTDIR)/ + $(COPY_FILE) --parents documentation.cpp helperfunctions.cpp main.cpp mainwindow.cpp node.cpp $(DISTDIR)/ + + +clean: compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) Makefile + + +####### Sub-libraries + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_rcc_make_all: qrc_resource.cpp +compiler_rcc_clean: + -$(DEL_FILE) qrc_resource.cpp +qrc_resource.cpp: resource.qrc \ + /usr/bin/rcc \ + res/tree_l2.png \ + res/tree_r3.png \ + res/tree_l1.png \ + res/tree_r2.png \ + res/tree_r1.png \ + res/tree_l4.png \ + res/tree_l3.png \ + res/tree_r4.png + /usr/bin/rcc -name resource resource.qrc -o qrc_resource.cpp + +compiler_moc_predefs_make_all: moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) moc_predefs.h +moc_predefs.h: /usr/lib/qt/mkspecs/features/data/dummy.cpp + g++ -pipe -O2 -Wall -Wextra -dM -E -o moc_predefs.h /usr/lib/qt/mkspecs/features/data/dummy.cpp + +compiler_moc_header_make_all: moc_documentation.cpp moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_documentation.cpp moc_mainwindow.cpp +moc_documentation.cpp: documentation.h \ + moc_predefs.h \ + /usr/bin/moc + /usr/bin/moc $(DEFINES) --include /home/boss/RBTree/moc_predefs.h -I/usr/lib/qt/mkspecs/linux-g++ -I/home/boss/RBTree -I/usr/include/qt -I/usr/include/qt/QtWidgets -I/usr/include/qt/QtGui -I/usr/include/qt/QtCore -I/usr/include/c++/10.2.0 -I/usr/include/c++/10.2.0/x86_64-pc-linux-gnu -I/usr/include/c++/10.2.0/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include-fixed -I/usr/include documentation.h -o moc_documentation.cpp + +moc_mainwindow.cpp: mainwindow.h \ + helperfunctions.h \ + node.hpp \ + moc_predefs.h \ + /usr/bin/moc + /usr/bin/moc $(DEFINES) --include /home/boss/RBTree/moc_predefs.h -I/usr/lib/qt/mkspecs/linux-g++ -I/home/boss/RBTree -I/usr/include/qt -I/usr/include/qt/QtWidgets -I/usr/include/qt/QtGui -I/usr/include/qt/QtCore -I/usr/include/c++/10.2.0 -I/usr/include/c++/10.2.0/x86_64-pc-linux-gnu -I/usr/include/c++/10.2.0/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include-fixed -I/usr/include mainwindow.h -o moc_mainwindow.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean + +####### Compile + +documentation.o: documentation.cpp documentation.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o documentation.o documentation.cpp + +helperfunctions.o: helperfunctions.cpp helperfunctions.h \ + node.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o helperfunctions.o helperfunctions.cpp + +main.o: main.cpp mainwindow.h \ + helperfunctions.h \ + node.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp + +mainwindow.o: mainwindow.cpp mainwindow.h \ + helperfunctions.h \ + node.hpp \ + documentation.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp + +node.o: node.cpp node.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o node.o node.cpp + +qrc_resource.o: qrc_resource.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_resource.o qrc_resource.cpp + +moc_documentation.o: moc_documentation.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_documentation.o moc_documentation.cpp + +moc_mainwindow.o: moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp + +####### Install + +install_target: first FORCE + @test -d $(INSTALL_ROOT)/opt/RBTree/bin || mkdir -p $(INSTALL_ROOT)/opt/RBTree/bin + $(QINSTALL_PROGRAM) $(QMAKE_TARGET) $(INSTALL_ROOT)/opt/RBTree/bin/$(QMAKE_TARGET) + -$(STRIP) $(INSTALL_ROOT)/opt/RBTree/bin/$(QMAKE_TARGET) + +uninstall_target: FORCE + -$(DEL_FILE) $(INSTALL_ROOT)/opt/RBTree/bin/$(QMAKE_TARGET) + -$(DEL_DIR) $(INSTALL_ROOT)/opt/RBTree/bin/ + + +install: install_target FORCE + +uninstall: uninstall_target FORCE + +FORCE: + diff --git a/Khalilov_Shokhboz_cw/src/RBTree.pro b/Khalilov_Shokhboz_cw/src/RBTree.pro new file mode 100644 index 0000000..24da4d6 --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/RBTree.pro @@ -0,0 +1,32 @@ +#TEMPLATE = app +#TARGET = RBTree +##INCLUDEPATH += . +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++20 + +DEFINES += QT_DEPRECATED_WARNINGS +# You can make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# Please consult the documentation of the deprecated API in order to know +# how to port your code away from it. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +# Input +HEADERS += documentation.h helperfunctions.h mainwindow.h node.hpp \ + libs.h +SOURCES += documentation.cpp \ + helperfunctions.cpp \ + main.cpp \ + mainwindow.cpp \ + node.cpp +RESOURCES += resource.qrc + + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target diff --git a/Khalilov_Shokhboz_cw/src/RBTree.pro.user b/Khalilov_Shokhboz_cw/src/RBTree.pro.user new file mode 100644 index 0000000..768ba98 --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/RBTree.pro.user @@ -0,0 +1,355 @@ + + + + + + EnvironmentId + {3a1d5666-9691-4613-9369-03601864aee7} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + *.md, *.MD, Makefile + false + true + + + + ProjectExplorer.Project.PluginSettings + + + true + true + true + true + true + + + 0 + true + + true + Builtin.Questionable + + true + Builtin.DefaultTidyAndClazy + 4 + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + Desktop + {e43382f3-622d-4dbb-b942-ca6139117d82} + 1 + 0 + 0 + + true + 0 + /home/boss/build-RBTree-Desktop-Debug + /home/boss/build-RBTree-Desktop-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 2 + 2 + + + true + 2 + /home/boss/build-RBTree-Desktop-Release + /home/boss/build-RBTree-Desktop-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 2 + + + true + 0 + /home/boss/build-RBTree-Desktop-Profile + /home/boss/build-RBTree-Desktop-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:/home/boss/RBTree/RBTree.pro + /home/boss/RBTree/RBTree.pro + + false + + false + true + true + false + false + true + + /home/boss/build-RBTree-Desktop-Release + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/Khalilov_Shokhboz_cw/src/documentation.cpp b/Khalilov_Shokhboz_cw/src/documentation.cpp new file mode 100644 index 0000000..0578abf --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/documentation.cpp @@ -0,0 +1,201 @@ +#include "documentation.h" + +Documentation::Documentation(QWidget *parent) :QDialog(parent) { + + QString Documentation; + close = new QPushButton("&close", this); + grid_layout = new QGridLayout(); + ScrolArea = new QScrollArea(this); + + info = new QTextBrowser(ScrolArea); + info->setText(Documentation); + grid_layout->addWidget(info, 0, 0, 1, 1); + grid_layout->addWidget(close, 1, 0, 1, 1, Qt::AlignRight); + setLayout(grid_layout); + info->setAlignment(Qt::AlignCenter); + QString style_buttom = "QPushButton{ " + "background-color: #00bdaa;" + "height: 40px;" + "width: 100px;" + "margin:0;" + "border-radius: 0;" + "}" + "QPushButton:hover { " + "background-color: rgb(255, 69, 0);" + "}"; + + close->setStyleSheet(style_buttom); + setFixedSize(800, 800); + connect(close, SIGNAL(clicked()), this, SLOT(close())); + setWindowTitle("Documentation"); + setLayout(grid_layout); + setStyleSheet("QTextBrowser{" + "font-size: 14pt;" + "}"); + info->setHtml( +"

Красно-чёрное дерево

" +"

двоичное дерево поиска, в котором каждый узел имеет атрибут цвета. При этом:

" +"
    " +"
  1. " +" Узел может быть либо красным, либо чёрным и имеет двух потомков; " +"
  2. " +"
  3. " +" Корень — как правило чёрный. Это правило слабо влияет на работоспособность модели, так как цвет корня всегда можно изменить с красного на чёрный;" +"
  4. " +"
  5. Все листья, не содержащие данных — чёрные.
  6. " +"
  7. " +" Оба потомка каждого красного узла — чёрные." +"
  8. " +"
  9. " +" Любой простой путь от узла-предка до листового узла-потомка содержит одинаковое число чёрных узлов. " +"
  10. " +"
" +"

" +" Благодаря этим ограничениям, путь от корня до самого дальнего листа не более чем вдвое длиннее, чем до самого ближнего и дерево примерно сбалансировано. Операции вставки, удаления и поиска требуют в худшем случае времени, пропорционального длине дерева, что позволяет красно-чёрным деревьям быть более эффективными в худшем случае, чем обычные двоичные деревья поиска.

" +"

Чтобы понять, как это работает, достаточно рассмотреть эффект свойств 4 и 5 вместе. Пусть для красно-чёрного дерева T число чёрных узлов от корня до листа равно B. Тогда кратчайший возможный путь до любого листа содержит B узлов и все они чёрные. Более длинный возможный путь может быть построен путём включения красных узлов. Однако, благодаря п.4 в дереве не может быть двух красных узлов подряд, а согласно пп. 2 и 3, путь начинается и кончается чёрным узлом. Поэтому самый длинный возможный путь состоит из 2H-1 узлов, попеременно красных и чёрных.

" +"

" +"

Вставка

" +"

Новый узел в красно-чёрное дерево добавляется на место одного из листьев, окрашивается в красный цвет и к нему прикрепляется два листа (так как листья являются абстракцией, не содержащей данных, их добавление не требует дополнительной операции). Что происходит дальше, зависит от цвета близлежащих узлов. Заметим, что:

" +" " +"

Случай 1:

" +"

Текущий узел в корне дерева. В этом случае, он перекрашивается в чёрный цвет, чтобы оставить верным Свойство 2 (Корень — чёрный). Так как это действие добавляет один чёрный узел в каждый путь, Свойство 5 (Все пути от любого данного узла до листовых узлов содержат одинаковое число чёрных узлов) не нарушается." +"

" +"

Случай 2:

" +"

" +" Предок текущего узла чёрный, то есть Свойство 4 (Оба потомка каждого красного узла — чёрные) не нарушается. В этом случае дерево остаётся корректным. Свойство 5 (Все пути от любого данного узла до листовых узлов содержат одинаковое число чёрных узлов) не нарушается, потому что текущий узел имеет двух чёрных листовых потомков, но так как N является красным, путь до каждого из этих потомков содержит такое же число чёрных узлов, что и путь до чёрного листа, который был заменен текущим узлом, так что свойство остается верным." +"

" +"

Случай 3:

" +"

" +" Если и родитель, и дядя — красные, то они оба могут быть перекрашены в чёрный, и дедушка станет красным (для сохранения свойства 5 (Все пути от любого данного узла до листовых узлов содержат одинаковое число чёрных узлов)). Теперь у текущего красного узла чёрный родитель. Так как любой путь через родителя или дядю должен проходить через дедушку, число чёрных узлов в этих путях не изменится. Однако, дедушка теперь может нарушить свойства 2 (Корень — чёрный) или 4 (Оба потомка каждого красного узла — чёрные) (свойство 4 может быть нарушено, так как родитель может быть красным). Чтобы это исправить, вся процедура рекурсивно выполняется на из случая 1." +"

" + +"

Случай 4:

" + "

" + "Родитель является красным, но дядя — чёрный. Также, текущий узел — правый потомок, а в свою очередь — левый потомок своего предка. В этом случае может быть произведен поворот дерева, который меняет роли текущего узла и его предка. Тогда, для бывшего родительского узла в обновленной структуре используем случай 5, потому что Свойство 4 (Оба потомка любого красного узла — чёрные) все ещё нарушено. Вращение приводит к тому, что некоторые пути (в поддереве, обозначенном «1» на схеме) проходят через узел, чего не было до этого. Это также приводит к тому, что некоторые пути (в поддереве, обозначенном «3») не проходят через узел. Однако, оба эти узла являются красными, так что Свойство 5 (Все пути от любого данного узла до листовых узлов содержат одинаковое число чёрных узлов) не нарушается при вращении. Однако Свойство 4 всё ещё нарушается, но теперь задача сводится к Случаю 5." + "

" + "

Случай 5:

" + "

" +" Родитель является красным, но дядя — чёрный, текущий узел — левый потомок и родитель — левый потомок. В этом случае выполняется поворот дерева на дедушки. В результате получается дерево, в котором бывший родитель теперь является родителем и текущего узла и бывшего дедушки. Известно, что дедушка — чёрный, так как его бывший потомок не мог бы в противном случае быть красным (без нарушения Свойства 4). Тогда цвета родитель и дедушка меняются и в результате дерево удовлетворяет Свойству 4 (Оба потомка любого красного узла — чёрные). Свойство 5 (Все пути от любого данного узла до листовых узлов содержат одинаковое число чёрных узлов) также остается верным, так как все пути, которые проходят через любой из этих трех узлов, ранее проходили через дедушки, поэтому теперь они все проходят через родителя. В каждом случае, из этих трёх узлов только один окрашен в чёрный." +"

" + "

Повернуть влево

" + "

При вращении влево расположение узлов справа преобразуется в расположение узлов слева.

" + "

Алгоритм

" + "
    " + "
  1. " + " " + " Пусть исходное дерево будет:" + " " + "
    " + "
    " + " " + "
    " + "
  2. " + "
  3. " + " " + " Если y имеет левое поддерево, назначьте \"x\" в качестве родителя левого поддерева \"y\"." + " " + "
    " + "
    " + " " + "
    " + "
  4. " + "
  5. " + " " + " Если родитель \"x\" есть NULL, сделатьy как корень дерева." + " " + "
    " + "
  6. " + "
  7. " + " " + " Иначе, если \"x\" левый ребенок \"p\", сделать \"y\" как левый ребенок \"p\"." + " " + "
    " + "
  8. " + "
  9. " + " " + " Иначе назначить \"y\" как правильный ребенок \"p\"" + " " + "
    " + "
    " + " " + "
    " + "
  10. " + "
  11. " + " " + " Сделать \"y\" как родитель \"x\"" + " " + "
    " + "
    " + " " + "
    " + "
  12. " + "
" + "" + "

Повернуть влево

" + "

При вращении влево расположение узлов справа преобразуется в расположение узлов слева.

" + "

Алгоритм

" + "
    " + "
  1. " + " " + " Пусть исходное дерево будет:" + " " + "
    " + "
    " + " " + "
    " + "
  2. " + "
  3. " + " " + " Если \"x\" имеет правое поддерево, назначьте y в качестве родителя правого поддерева \"x\"" + " " + "
    " + "
    " + " " + "
    " + "
  4. " + "
  5. " + " " + " Если родитель \"y\" есть NULL, сделать \"x\" как корень дерева." + " " + "
    " + "
  6. " + "
  7. " + " " + " Иначе, если \"y\" правый дочерний элемент своего родителя \"p\", сделать \"x\" как правильный ребенок \"p\"" + " " + "
    " + "
  8. " + "
  9. " + " " + " Иначе назначить \"x\" как левый ребенок \"p\"" + " " + "
    " + "
    " + " " + "
    " + "
  10. " + "
  11. " + " " + " Сделать \"x\" как родитель \"y\"" + " " + "
    " + "
    " + " " + "
    " + "
  12. " + "
" + + ); + +} + +Documentation::~Documentation() { + + delete close; + delete grid_layout; + delete info; +} diff --git a/Khalilov_Shokhboz_cw/src/documentation.h b/Khalilov_Shokhboz_cw/src/documentation.h new file mode 100644 index 0000000..07f82dc --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/documentation.h @@ -0,0 +1,20 @@ +#ifndef DOCUMENTATION_H +#define DOCUMENTATION_H + +#include "libs.h" + +class Documentation : public QDialog +{ + Q_OBJECT +private: + QPushButton *close; + QGridLayout *grid_layout; + QScrollArea *ScrolArea; + QTextBrowser *info; + +public: + Documentation(QWidget *parent = 0); + ~Documentation(); +}; + +#endif // DOCUMENTATION_H diff --git a/Khalilov_Shokhboz_cw/src/helperfunctions.cpp b/Khalilov_Shokhboz_cw/src/helperfunctions.cpp new file mode 100644 index 0000000..a83edd2 --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/helperfunctions.cpp @@ -0,0 +1,171 @@ +#include "helperfunctions.h" + +bool isRed(Node *elem) +{ + if (elem != nullptr) + return elem->getColor() == RED; + + return false; +} + +bool isBlack(Node *elem) +{ + if (elem != nullptr){ + + return elem->getColor() == BLACK; + } + + return true; +} + +Node *Parent(Node *elem) +{ + // * Обратите внимание, что для корневого узла родительский элемент имеет значение null. + return elem == nullptr ? nullptr : elem->getParent(); +} + +Node *GrandParent(Node *elem) +{ + // * Обратите внимание, что он вернет nullptr, если это root или дочерний элемент root + return Parent(Parent(elem)); +} + +bool isLeft(Node *elem) +{ + if (Parent(elem)) + return Parent(elem)->getLeft() == elem; + + return false; +} + +bool isRight(Node *elem) +{ + if (Parent(elem)) + return Parent(elem)->getRight() == elem; + return false; +} + +Node *Brother(Node *elem){ + // * Отсутствие родителя означает отсутствие брата или сестры. + if (Parent(elem)) + { + if (isLeft(elem)) + { + return Parent(elem)->getRight(); + } + else + { + return Parent(elem)->getLeft(); + } + } + + return nullptr; +} + +Node *Uncle(Node *elem) +{ + //* Отсутствие родителя означает отсутствие дяди + return Brother(Parent(elem)); +} + +Node *Root(Node *elem){ + + Node *root = elem; + if(root){ + while (root->getParent()) + { + root = root->getParent(); + } + } + return root; +} + +Node *findElem(Node *root, int key) +{ + Node *tmp = root; + while (tmp != nullptr) + { + if (tmp->getValue() == key) + { + return tmp; + } + if (tmp->getValue() > key) + { + tmp = tmp->getLeft(); + } + else + { + tmp = tmp->getRight(); + } + } + return nullptr; +} + +void free(Node *elem){ + + if( isLeaf( elem )){ + + return; + } + if( isLeft ( elem ) ) { + + Parent(elem )->setLeft(nullptr); + } + else if( isRight ( elem ) ) + { + Parent(elem)->setRight(nullptr); + } + + delete elem; + elem = nullptr; +} + +int CountElem(Node *elem, int key){ + + int l = 0, r = 0; + if(elem->getLeft()) + l = CountElem(elem->getLeft(), key); + + if(elem->getRight()) + r = CountElem(elem->getRight(), key); + + if( elem->getValue() == key ){ + return 1+l+r; + } + return l+r; +} + +bool isNotLeaf(Node *elem){ + return elem != nullptr; +} + +bool isLeaf(Node *elem){ + return elem == nullptr; +} + + +//int Show(Node *elem, QGraphicsScene *Scene, int x, int y){ + +// int l = 0; +// int r = 0; +// if(elem == nullptr){ +// return 1; +// } +// Scene->addItem(elem); +// l = Show(elem->getLeft(), Scene, x-50, y+50); +// r = Show(elem->getRight(), Scene, x+50, y+50); + +// if( isLeft( elem ) ) { + +// elem->setPos(x-r*50, y); + +// } +// else if( isRight(elem) ){ + +// elem->setPos(x+l*50, y); +// } +// else { +// elem->setPos(x, y); +// } +// return l>r? l : r; +//} diff --git a/Khalilov_Shokhboz_cw/src/helperfunctions.h b/Khalilov_Shokhboz_cw/src/helperfunctions.h new file mode 100644 index 0000000..880cd46 --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/helperfunctions.h @@ -0,0 +1,37 @@ +#ifndef HELPERFUNCTIONS_H +#define HELPERFUNCTIONS_H +#include "node.hpp" + +void createForest(Node *&root, int *arr, int size); + +bool isRed(Node *elem); + +bool isBlack(Node *elem); + +Node *Parent(Node *elem); + +Node *GrandParent(Node *elem); + +bool isLeft(Node *elem); + +bool isRight(Node *elem); + +Node *Brother(Node *elem); + +Node *Uncle(Node *elem); + +Node * Root(Node* elem);; + +Node *findElem(Node *root, int key); + +void free(Node *elem); + +bool isLeaf(Node *elem); + +bool isNotLeaf(Node *elem); + +int CountElem(Node *elem, int key); + +//int Show(Node *elem, QGraphicsScene *Scene, int x, int y ); + +#endif // HELPERFUNCTIONS_H diff --git a/Khalilov_Shokhboz_cw/src/libs.h b/Khalilov_Shokhboz_cw/src/libs.h new file mode 100644 index 0000000..e8c05e0 --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/libs.h @@ -0,0 +1,34 @@ +#ifndef LIBS_H +#define LIBS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include + + +#include +#include +#include + + +#endif // LIBS_H diff --git a/Khalilov_Shokhboz_cw/src/main.cpp b/Khalilov_Shokhboz_cw/src/main.cpp new file mode 100644 index 0000000..fd3e533 --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/Khalilov_Shokhboz_cw/src/mainwindow.cpp b/Khalilov_Shokhboz_cw/src/mainwindow.cpp new file mode 100644 index 0000000..24ea02e --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/mainwindow.cpp @@ -0,0 +1,486 @@ +#include "mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + + CentralWidget = new QWidget(); + setScene(); + setMinimumSize(800, 600); + setCentralWidget(CentralWidget); + + ButtonAdd = new QPushButton("Add"); + ButtonDoc = new QPushButton("Documentation"); + genration = new QPushButton("Generation"); + Clean = new QPushButton("Clean"); + TextEdit = new QTextBrowser(); + TextEdit->setReadOnly(true); + + lineEdit = new QSpinBox(); + lineEditTwo = new QSpinBox(); + + slider = new QSlider(this); + slider->setTickInterval(100); + slider->setMaximum(5000); + slider->setMinimum(1000); + slider->setFixedSize(60, 150); + + QHBoxLayout *main_Layout = new QHBoxLayout(); + QVBoxLayout *VBLayout = new QVBoxLayout(); + QHBoxLayout *HBLayout = new QHBoxLayout(); + QHBoxLayout *HBLayout2 = new QHBoxLayout(); + QHBoxLayout *HBLayout3 = new QHBoxLayout(); + + QVBoxLayout *VBLayout2 = new QVBoxLayout(); + QHBoxLayout *HBLayout4 = new QHBoxLayout(); + + ButtonAdd->setFixedSize(270, 50); + ButtonDoc->setFixedSize(270, 50); + genration->setFixedSize(270, 50); + Clean->setFixedSize(270, 50); + lineEdit->setFixedSize(270, 50); + lineEditTwo->setFixedSize(270, 50); + TextEdit->setFixedWidth(600); + + VBLayout2->addItem(HBLayout); + VBLayout2->addItem(HBLayout2); + VBLayout2->addItem(HBLayout3); + HBLayout4->addWidget(slider); + HBLayout4->addItem(VBLayout2); + + + HBLayout->addWidget(lineEdit); + HBLayout->addWidget(ButtonAdd); + + HBLayout2->addWidget(lineEditTwo); + HBLayout2->addWidget(genration); + + HBLayout3->addWidget(ButtonDoc); + HBLayout3->addWidget(Clean); + + VBLayout->addWidget(TextEdit); + VBLayout->addItem(HBLayout4); + + HBLayout2->setContentsMargins(0, 0, 0,0); + HBLayout->setContentsMargins(0, 0, 0,0); + main_Layout->setContentsMargins(0, 0, 0,0); + VBLayout->setContentsMargins(0, 0, 0,0); + HBLayout4->setContentsMargins(0, 0, 0,0); + VBLayout2->setContentsMargins(0, 0, 0,0); + + main_Layout->addWidget(View); + main_Layout->addItem(VBLayout); + + showMaximized(); + connect(ButtonAdd, &QPushButton::clicked, this, &MainWindow::add); + connect(Clean, &QPushButton::clicked, this, &MainWindow::clean); + connect(genration, &QPushButton::clicked, this, &MainWindow::generation); + connect(ButtonDoc, &QPushButton::clicked, this, &MainWindow::documentation); + connect(slider, &QSlider::valueChanged, this, [&](){ + interval = slider->value(); + Tm.setInterval(interval); + }); + View->show(); + Tm.setInterval(interval); + connect(&Tm, &QTimer::timeout, this, [&](){ + showing(); + }); + CentralWidget->setLayout(main_Layout); + setStyleSheet("QPushButton{ " + " background-color: #242240; " + " color: white; " + " height: 50px; " + " width: 300px; " + " margin: 1px 1px; " + " border-radius: 0; " + " border: 2px; " + " font-size: 18pt; " + "} " + "QPushButton:hover { " + " background-color: rgb(255, 69, 0); " + "} " + "QTextBrowser{" + "font-size: 14pt;" + "" + "}" + ".QSlider::groove:horizontal {" + "border: 1px solid #999999;" + "height: 8px;" + "background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);" + "margin: 2px 0;" + " }" + ".QSlider::handle:horizontal {" +" background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);" +" border: 1px solid #5c5c5c;" +" width: 18px;" +" margin: -2px 0; " + " border-radius: 3px;" + "}"); + +} + + +void MainWindow::documentation() { + + Documentation doc; + doc.exec(); +} + +MainWindow::~MainWindow() +{ + if( Head ) delete Head; + if( !items.empty() ){ + system("rm *.png"); + system("rm *.dot"); + } +} + + + +void MainWindow::update(std::string str) +{ + int nn=0; + std::string grap = ""; + makeGgaph(Head, grap, nn); + std::ofstream graphic("tree.dot"); + graphic << DIGRAPH; + graphic << NODESTYLE; + graphic <В структуре этот элемент [ "+ std::to_string(x) + " ] уже существует

\n"); + return; + } + + update("

Добавить элемент [ "+std::to_string(x)+" ]

\n"); + + Insert(Head, new Node( x, RED)); + +} + + + +void MainWindow::showing(){ + + if(counter == count ){ + + Tm.stop(); + return; + } + + std::list::iterator it = items.begin() ; + + std::advance(it, counter++); + QImage image(QString::fromStdString((*it)->path)); + QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(image)); + comments += (*it)->comment +"\n"; + Scene->clear(); + Scene->addItem(item); + View->update(); + + TextEdit->setHtml(QString::fromStdString(comments)); + TextEdit->verticalScrollBar()->setValue(TextEdit->verticalScrollBar()->maximum()); +} + +void MainWindow::clean() +{ + if( Head ) delete Head; + Head = nullptr; + comments = ""; + TextEdit->setText(QString::fromStdString(comments)); + count = 0; + counter = 0; + items.clear(); + Scene->clear(); + system("rm *.png"); + system("rm *.dot"); +} + +void MainWindow::generation() +{ + int len; + if(lineEditTwo->value() <= 0){ + len = 10; + }else { + len = lineEditTwo->value(); + } + lineEditTwo->clear(); + Tm.start(); + srand(time(0)); + for (int i = 0; i < len ; i++ ) { + insertElem(rand()%100); + } +} + +void MainWindow::add() +{ + if(lineEdit->value() <= 0) + return; + + int tmp = lineEdit->value(); + lineEdit->clear(); + if(findElem(Head, tmp)){ + update("

В структуре этот элемент [ "+ std::to_string(tmp) + " ] уже существует

\n"); + return; + } + Insert(Head, new Node(tmp, RED)); + update("

Добавить элемент [ "+std::to_string(tmp)+" ]

\n"); + Tm.start(); +} + + +void MainWindow::setScene() +{ + Scene = new QGraphicsScene(CentralWidget); + Scene->setBackgroundBrush(Qt::white); + View = new QGraphicsView(Scene); +} + +void MainWindow::InsertRecurse(Node *current, Node *elem) +{ + //? Рекурсивно спускайтесь по дереву до тех пор, пока не будет найден лист. + if (current != nullptr) + { + //? если текущее значение больше чем новое значение, то слева от этого + if (current->getValue() > elem->getValue()) + { + //? если левая сторона узла не пуста + if (current->getLeft() != nullptr) + { + //* Рекурсивно спускаться влево-вниз + InsertRecurse(current->getLeft(), elem); + + return; + } + + //? если левая сторона узла пуста + //* присваивать значение на левом узле + current->setLeft(elem); + + + } + else //? если текущее значение меньше чем новое значение, то справа от этого + { + //? если правая сторона узла не пуста + if (current->getRight() != nullptr) + { + //* Рекурсивно спускаться право-вниз + InsertRecurse(current->getRight(), elem); + + + return; + } + + //? если правая сторона узла пуста + //* присваивать значение на правом узле + current->setRight(elem); + + + } + } + //* сделать текущий элемент родительским для нового элемента + elem->setParent(current); + + +} + +void MainWindow::fixProperties(Node *elem) +{ + std::string comment =""; + + if (!Parent(elem)) + { + comment = "

[ см. Случай 1 ]

"; + comment +="

Элемент [ "+ std::to_string(elem->getValue()) + " ] стал корнем дерева

"; + update(comment); + elem->setColor(BLACK); + return; + } + else if (isBlack(Parent(elem))) + { + comment = "

[ см. Случай 2 ]

"; + comment +="

У элемента [ "+ std::to_string(elem->getValue()) + " ] родитель [ "+std::to_string(Parent(elem)->getValue()) +" ] чёрный, " + "поэтому ничего не меняется, так как свойство не нарушается

"; + update(comment); + return; + } + else if (Uncle(elem) != nullptr && isRed(Uncle(elem))) + { + comment = "

[ см. Случай 3 ]

"; + comment += "

У элемента [ "+ std::to_string(elem->getValue()) + " ] родитель [ "+std::to_string(Parent(elem)->getValue()) +" ] красный, есть дядя [ "+std::to_string(Uncle(elem)->getValue()) +" ] и он тоже красный " +"Поэтому родитель [ "+std::to_string(Parent(elem)->getValue()) +" ] и дядя [ "+std::to_string(Uncle(elem)->getValue()) +" ] окрашиваются в черный, а дедушка [ "+std::to_string(GrandParent(elem)->getValue()) +" ] " +"становится красным и вызывается повторная проверка с дедушкой

"; + + update(comment); + + Parent(elem)->setColor(BLACK); + Uncle(elem)->setColor(BLACK); + GrandParent(elem)->setColor(RED); + fixProperties(GrandParent(elem)); + + return; + } + else if (isRight(elem) && isLeft(Parent(elem))) + { + comment = "

[ см. Случай 4 ]

"; + comment += "

Элемент [ "+ std::to_string(elem->getValue()) + " ] является левым, а родитель [ "+std::to_string(Parent(elem)->getValue()) +" ] является\n" +"правым элементом, поэтому делаем поворот направо вокруг родителя [ "+std::to_string(Parent(elem)->getValue()) +" ]

"; + + update(comment); + + RotateLeft(Parent(elem)); + elem = elem->getLeft(); + + } + else if (isLeft(elem) && isRight(Parent(elem))) + { + comment = "

[ см. Случай 4 ]

"; + comment +="

Элемент [ "+ std::to_string(elem->getValue()) + " ] является правым, а родитель [ "+std::to_string(Parent(elem)->getValue()) +" ] является " +"левым элементом, поэтому делаться поворот налево вокруг родителя [ "+std::to_string(Parent(elem)->getValue()) +" ]

"; + +update(comment); + RotateRight(Parent(elem)); + elem = elem->getRight(); + } + + comment = "

[ см. Случай 5 ]

"; + comment +="

Родитель [ "+std::to_string(Parent(elem)->getValue()) +" ] элемента [ "+std::to_string(elem->getValue()) + " ], окрашивается в черный, а дедушка [ "+std::to_string(GrandParent(elem)->getValue()) +" ] в красный

"; + + update(comment); + Parent(elem)->setColor(BLACK); + GrandParent(elem)->setColor(RED); + + if (isLeft(elem) && isLeft(Parent(elem))) + { + comment ="

Элемент [ "+ std::to_string(elem->getValue()) + " ] является левым узлом. Родитель [ "+std::to_string(elem->getValue()) + " ] также является левым узлом, поэтому делаться поворот направо вокруг дедушки [ "+std::to_string(GrandParent(elem)->getValue()) +" ]

"; + + RotateRight(GrandParent(elem)); + } + else + { + comment ="

Элемент [ "+ std::to_string(elem->getValue()) + " ] является правым узлом. Родитель [ "+std::to_string(elem->getValue()) + " ] также является правым узлом, поэтому делаться поворот налево вокруг дедушки [ "+std::to_string(GrandParent(elem)->getValue()) +" ]

"; + + RotateLeft(GrandParent(elem)); + } +} + +void MainWindow::Insert(Node *&root, Node *elem) +{ + //* Вставить новый узел в текущее дерево. + InsertRecurse(root, elem); + + //* Восстановите дерево в случае нарушения какого-либо из красно-черных свойств. + fixProperties(elem); + //* Найти новый корень для возврата. + root = elem; + while (root->getParent()) + { + root = root->getParent(); + } +} + +void MainWindow::makeGgaph(Node *elem, std::string &str, int &n){ + + if( elem == nullptr ){ + str += "n"+std::to_string(n)+NILL; + return; + } + if(isRed(elem)){ + str += std::to_string(elem->getValue())+REDTREE; + } + else { + str += std::to_string(elem->getValue())+BLACKTREE; + } + + if(isNotLeaf(elem->getLeft())){ + + str += std::to_string(elem->getValue())+" -> "+std::to_string(elem->getLeft()->getValue())+"\n"; + makeGgaph(elem->getLeft(), str, n); + } + else{ + n++; + str += std::to_string(elem->getValue())+" -> n"+std::to_string(n)+"\n"; + str += "n"+std::to_string(n)+NILL; + } + + if( isNotLeaf(elem->getRight()) ){ + str += std::to_string(elem->getValue())+" -> "+std::to_string(elem->getRight()->getValue())+"\n"; + makeGgaph(elem->getRight(), str, n); + } + else{ + n++; + str += std::to_string(elem->getValue())+" -> n"+std::to_string(n)+"\n"; + str +="n"+ std::to_string(n)+NILL; + } +} + + +void MainWindow::RotateLeft(Node *elem) +{ + std::string comment = "

[ поворот налево ] по элементу [ "+std::to_string( elem->getValue()) +" ]

" + "

[ см. Повернуть влево ]

"; + update(comment); + Node *Son = elem->getRight(); + Node *parent = Parent(elem ); + Son->setParent( parent ); //* при этом, возможно, Son становится корнем дерева + + if ( parent ) + { + if (isLeft(elem)) + { + parent->setLeft( Son ); + } + else + { + parent->setRight( Son ); + } + } + + elem->setRight( Son->getLeft() ); + if (Son->getLeft()) + { + Son->getLeft()->setParent( elem ); + } + elem->setParent( Son ); + Son->setLeft( elem ); +} + +void MainWindow::RotateRight(Node *elem) +{ + + std::string comment = "

[ поворот направо ] по элементу [ "+std::to_string( elem->getValue()) +" ]

" + "

[ см. Повернуть влево ]

";; + Node *Son = elem->getLeft(); + Node *parent = Parent(elem ); + update(comment); + Son->setParent( parent ); //* при этом, возможно, Son становится корнем дерева + + if (parent) + { + if (isLeft(elem)) + { + parent->setLeft( Son ); + } + else + { + parent->setRight( Son ); + } + } + elem->setLeft( Son->getRight() ); + if ( Son->getRight() ){ + Son->getRight()->setParent( elem ); + } + elem->setParent( Son ); + Son->setRight( elem ); +} diff --git a/Khalilov_Shokhboz_cw/src/mainwindow.h b/Khalilov_Shokhboz_cw/src/mainwindow.h new file mode 100644 index 0000000..86d4c5e --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/mainwindow.h @@ -0,0 +1,53 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H +#include "documentation.h" +#include "helperfunctions.h" + + +class MainWindow : public QMainWindow +{ + Q_OBJECT +private: + QTimer Tm; + int interval = 1000; + void InsertRecurse(Node *current, Node *elem); + void RotateLeft(Node *elem); + void RotateRight(Node *elem); + void fixProperties(Node *elem); + void Insert(Node *&root, Node *elem); + void makeGgaph(Node *elem, std::string &str, int &n); + std::string comments =""; + std::list items; + QTextBrowser *TextEdit; + QSlider *slider = nullptr; +public: + QPushButton *ButtonAdd = nullptr; + QPushButton *ButtonDoc = nullptr; + QPushButton *genration = nullptr; + QPushButton *Clean = nullptr; + + QSpinBox *lineEdit = nullptr; + QSpinBox *lineEditTwo = nullptr; + int count = 0; + int counter = 0; + int len = 0; + int *Arr = nullptr; + Node *Head = nullptr; + MainWindow(QWidget *parent = nullptr); + + QGraphicsScene *Scene; + QGraphicsView *View; + QWidget* CentralWidget; + ~MainWindow(); + void update(std::string str); + void insertElem(int x); + void setScene(); + void showing(); +public slots: + void clean(); + void generation(); + void add(); + void documentation(); + +}; +#endif // MAINWINDOW_H diff --git a/Khalilov_Shokhboz_cw/src/node.cpp b/Khalilov_Shokhboz_cw/src/node.cpp new file mode 100644 index 0000000..2b415e0 --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/node.cpp @@ -0,0 +1,53 @@ +#include "node.hpp" + +Node *Node::getParent() const +{ + return parent; +} + +void Node::setParent(Node *value) +{ + parent = value; +} + +Node *Node::getLeft() const +{ + return left; +} + +void Node::setLeft(Node *value) +{ + left = value; +} + +Node *Node::getRight() const +{ + return right; +} + +void Node::setRight(Node *value) +{ + right = value; +} + +QColor Node::getColor() const +{ + return color; +} + +void Node::setColor(const QColor &value) +{ + this->setBrush(value); + color = value; +} + +int Node::getValue() const +{ + return value; +} + +void Node::setValue(int value) +{ + this->value = value; +} + diff --git a/Khalilov_Shokhboz_cw/src/node.hpp b/Khalilov_Shokhboz_cw/src/node.hpp new file mode 100644 index 0000000..80a03a1 --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/node.hpp @@ -0,0 +1,76 @@ +//! 1 +//* Каждый узел промаркирован красным или чёрным цветом +//! 2 +//* Корень и конечные узлы (листья) дерева - чёрные +//! 3 +//* У красного узла родительский узел - черный +//! 4 +//* Все простые пути из любого узла х до листьев содержат одинокавое количества чёрных узлов +//! 5 +//* Чёрный узел может иметь чёрного родителя + + +#ifndef NODE_HPP +#define NODE_HPP +#include "libs.h" + +#define DIGRAPH "digraph G {\n" +#define ENDGRAPH "\n}" +#define BLACKTREE " [ shape = circle, style=filled, fillcolor=black];\n" +#define REDTREE " [ shape = circle, style=filled, fillcolor=red];\n" +#define CURRENTTREE " [ shape = doublecircle, style=filled, color = blue, fillcolor=red];\n" +#define NILL " [shape = square, style=filled, fillcolor=black ];\n" +#define NODESTYLE "node[ color = white, fontcolor=white];\n"; + +#define RED Qt::red +#define BLACK Qt::black + + + +struct Item { + + std::string path; + std::string comment; + Item(std::string p, std::string c):path(p), comment(c){} +}; + + +class Node : public QGraphicsEllipseItem +{ +private: + int value; + QColor color = RED; + Node *parent; + Node *left; + Node *right; +public: + Node(int val, QColor cl): value(val), color(cl){ + + parent = left = right = nullptr; + setRect(0, 0, 50, 50); + } + Node *getParent() const; + void setParent(Node *value); + + Node *getLeft() const; + void setLeft(Node *value); + + Node *getRight() const; + void setRight(Node *value); + + QColor getColor() const; + void setColor(const QColor &value); + + int getValue() const; + void setValue(int value); + + ~Node(){ + if( left) delete left; + if( right ) delete right; + } +}; + + + + +#endif // NODE_HPP diff --git a/Khalilov_Shokhboz_cw/src/res/tree0.png b/Khalilov_Shokhboz_cw/src/res/tree0.png new file mode 100644 index 0000000..0c03ad5 Binary files /dev/null and b/Khalilov_Shokhboz_cw/src/res/tree0.png differ diff --git a/Khalilov_Shokhboz_cw/src/res/tree_l1.png b/Khalilov_Shokhboz_cw/src/res/tree_l1.png new file mode 100644 index 0000000..58fa65b Binary files /dev/null and b/Khalilov_Shokhboz_cw/src/res/tree_l1.png differ diff --git a/Khalilov_Shokhboz_cw/src/res/tree_l2.png b/Khalilov_Shokhboz_cw/src/res/tree_l2.png new file mode 100644 index 0000000..08a871c Binary files /dev/null and b/Khalilov_Shokhboz_cw/src/res/tree_l2.png differ diff --git a/Khalilov_Shokhboz_cw/src/res/tree_l3.png b/Khalilov_Shokhboz_cw/src/res/tree_l3.png new file mode 100644 index 0000000..80894dd Binary files /dev/null and b/Khalilov_Shokhboz_cw/src/res/tree_l3.png differ diff --git a/Khalilov_Shokhboz_cw/src/res/tree_l4.png b/Khalilov_Shokhboz_cw/src/res/tree_l4.png new file mode 100644 index 0000000..bfabba9 Binary files /dev/null and b/Khalilov_Shokhboz_cw/src/res/tree_l4.png differ diff --git a/Khalilov_Shokhboz_cw/src/res/tree_r1.png b/Khalilov_Shokhboz_cw/src/res/tree_r1.png new file mode 100644 index 0000000..25618a9 Binary files /dev/null and b/Khalilov_Shokhboz_cw/src/res/tree_r1.png differ diff --git a/Khalilov_Shokhboz_cw/src/res/tree_r2.png b/Khalilov_Shokhboz_cw/src/res/tree_r2.png new file mode 100644 index 0000000..b59a836 Binary files /dev/null and b/Khalilov_Shokhboz_cw/src/res/tree_r2.png differ diff --git a/Khalilov_Shokhboz_cw/src/res/tree_r3.png b/Khalilov_Shokhboz_cw/src/res/tree_r3.png new file mode 100644 index 0000000..0c03ad5 Binary files /dev/null and b/Khalilov_Shokhboz_cw/src/res/tree_r3.png differ diff --git a/Khalilov_Shokhboz_cw/src/res/tree_r4.png b/Khalilov_Shokhboz_cw/src/res/tree_r4.png new file mode 100644 index 0000000..943617a Binary files /dev/null and b/Khalilov_Shokhboz_cw/src/res/tree_r4.png differ diff --git a/Khalilov_Shokhboz_cw/src/resource.qrc b/Khalilov_Shokhboz_cw/src/resource.qrc new file mode 100644 index 0000000..adf7671 --- /dev/null +++ b/Khalilov_Shokhboz_cw/src/resource.qrc @@ -0,0 +1,12 @@ + + + res/tree_l1.png + res/tree_l2.png + res/tree_l3.png + res/tree_l4.png + res/tree_r1.png + res/tree_r2.png + res/tree_r3.png + res/tree_r4.png + + diff --git a/Khalilov_Shokhboz_cw/translations/qtbase_en.qm b/Khalilov_Shokhboz_cw/translations/qtbase_en.qm new file mode 100644 index 0000000..be651ee --- /dev/null +++ b/Khalilov_Shokhboz_cw/translations/qtbase_en.qm @@ -0,0 +1 @@ +