You are on page 1of 5

‫‪Data Structures‬‬

‫‪Notes for Lecture 11‬‬


‫‪Non Linear Data Structures‬‬
‫‪By‬‬
‫‪Samaher Hussein Ali‬‬
‫‪2007-2008‬‬

‫‪Representation of Arithmetic Expression Using Binary Tree‬‬


‫ﺗﻤﺜﻴﻞ اﻟﺘﻌﺎﺑﻴﺮ اﻟﺤﺴﺎﺑﻴﺔ ﺑﻮاﺳﻄﺔ اﻷﺷﺠﺎر اﻟﺜﻨﺎﺋﻴﺔ‬
‫ﻣﻦ اﻟﺘﻄﺒﻴﻘﺎت اﻟﻤﻬﻤﺔ ﻟﻸﺷﺠﺎر اﻟﺜﻨﺎﺋﻴﺔ هﻲ اﺳﺘﺨﺪاﻣﻬﺎ ﻓﻲ ﺗﻤﺜﻴﻞ اﻟﺘﻌﺎﺑﻴﺮ اﻟﺤﺴﺎﺑﻴﺔ ﺣﻴﺚ إن‪-:‬‬
‫‪ -‬اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ ﺗﻤﺜﻞ ﺑﻌﻘﺪ ﻣﺘﻔﺮﻋﺔ‬
‫‪ -‬اﻟﻌﻮاﻣﻞ ﺗﻤﺜﻞ ﺑﻮاﺳﻄﺔ اﻷوراق‬
‫‪ -‬ﻣﺴﺘﻮﻳﺎت اﻟﺸﺠﺮة ﺗﻌﻜﺲ أﺳﺒﻘﻴﺎت ﺗﻨﻔﻴﺬ اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ‬
‫ﻣﺜﺎل‪ -:‬اﺳﺘﺨﺪم اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﻴﺔ ﻟﺘﻤﺜﻴﻞ اﻟﺘﻌﺒﻴﺮ اﻟﺤﺴﺎﺑﻲ اﻟﺘﺎﻟﻲ ﺛﻢ ﻗﻢ ﺑﺰﻳﺎرﺗﻬﺎ‪-:‬‬
‫)‪A=B*C+(8+D*E)/(F*2‬‬

‫=‬

‫‪A‬‬ ‫‪+‬‬

‫*‬ ‫‪/‬‬

‫‪B‬‬ ‫‪C‬‬ ‫*‬


‫‪+‬‬

‫‪2‬‬
‫‪8‬‬ ‫‪C‬‬
‫*‬ ‫‪F‬‬

‫‪D‬‬ ‫‪E‬‬

‫‪=A+*BC/+8*DE*F2‬‬ ‫ﻋﻨﺪ زﻳﺎرﺗﻬﺎ ﺑﻄﺮﻳﻘﺔ اﻟﻤﺮور اﻟﺴﺎﺑﻖ ﻧﺤﺼﻞ ﻋﻠﻰ اﻟﺘﻌﺒﻴﺮ اﻟﺘﺎﻟﻲ‪-:‬‬ ‫•‬
‫)‪A=B*C+(8+D*E)/(F*2‬‬ ‫ﻋﻨﺪ زﻳﺎرﺗﻬﺎ ﺑﻄﺮﻳﻘﺔ اﻟﻤﺮور اﻟﺒﻴﻨﻲ ﻧﺤﺼﻞ ﻋﻠﻰ اﻟﺘﻌﺒﻴﺮ اﻟﺘﺎﻟﻲ‪-:‬‬ ‫•‬
‫=‪ABC*8DE*+F2*/‬‬ ‫ﻋﻨﺪ زﻳﺎرﺗﻬﺎ ﺑﻄﺮﻳﻘﺔ اﻟﻤﺮور اﻟﻼﺣﻖ ﻧﺤﺼﻞ ﻋﻠﻰ اﻟﺘﻌﺒﻴﺮ اﻟﺘﺎﻟﻲ‪-:‬‬ ‫•‬

‫‪1‬‬
‫‪Binary Search Tree‬‬
‫ﺷﺠﺮة اﻟﺒﺤﺚ اﻟﺜﻨﺎﺋﻴﺔ‬
‫هﻲ ﺷﺠﺮة ﺛﻨﺎﺋﻴﺔ ﻣﺮﺗﺒﺔ ﺗﻜﻮن اﻟﻘﻴﻤﺔ اﻟﺒﻴﺎﻧﻴﺔ ﻷﻳﺔ ﻋﻘﺪة ﻓﻴﻬ ﺎ ه ﻲ اآﺒ ﺮ ﻣ ﻦ اﻟﻘﻴﻤ ﺔ اﻟﺒﻴﺎﻧﻴ ﺔ ﻟﻠﻔ ﺮع اﻷﻳﺴ ﺮ واﺻ ﻐﺮ ﻣ ﻦ اﻟﻘﻴﻤ ﺔ اﻟﺒﻴﺎﻧﻴ ﺔ ﻟﻠﻔ ﺮع‬
‫اﻷﻳﻤﻦ‪.‬‬
‫ﻣﺜﺎل‪-:‬‬
‫‪50‬‬

‫‪20‬‬
‫‪90‬‬

‫‪10‬‬
‫‪80‬‬

‫‪70‬‬ ‫‪88‬‬

‫ﻣﻼﺣﻈﺔ‪ -:‬ﻳﺠﺐ ﻣﻌﺮﻓﺔ ﺗﺴﻠﺴﻞ اﻷﺣﺮف ﺑﻠﻐﺔ اﻹﻧﻜﻠﻴﺰﻳﺔ ﺣﻴﺚ هﻲ‪-:‬‬


‫‪ABCDEFGHIJKLMNOPQRSTUVWXYZ‬‬
‫ﻣﺜﺎل‪ -:‬ارﺳﻢ ﺷﺠﺮة اﻟﺒﺤﺚ اﻟﺜﻨﺎﺋﻴﺔ ﻟﻠﻌﻨﺎﺻﺮ اﻟﺘﺎﻟﻴﺔ‬
‫]‪[G,E,C,A,F,B,D‬‬
‫اﻟﺠﻮاب‪-:‬‬
‫وﻧﻌﺘﺒﺮﻩ اﻟﺠﺬر‬ ‫ﻻ‪ -:‬ﻧﺄﺧﺬ اﻟﻌﻨﺼﺮ وهﻮ ‪D‬‬
‫أو ً‬
‫‪D‬‬

‫ﺛﺎﻧﻴًﺎ‪ -:‬ﻧﺄﺧﺬ اﻟﻌﻨﺼﺮ اﻟﺜﺎﻧﻲ وهﻮ ‪ B‬وﻟﻜﻮﻧﻪ اﺻﻐﺮ ﻣﻦ اﻟﺠﺬر ﻓﻨﻌﺘﺒﺮﻩ اﺑﻦ أﻳﺴﺮ‬

‫‪D‬‬

‫‪B‬‬

‫ﺛﺎﻟﺜًﺎ‪ -:‬ﻧﺄﺧﺬ اﻟﻌﻨﺼﺮ اﻟﺜﺎﻟﺚ وهﻮ ‪ F‬وﻟﻜﻮﻧﻪ اآﺒﺮ ﻣﻦ اﻟﺠﺬر ﻓﻨﻌﺘﺒﺮﻩ اﺑﻦ أﻳﻤﻦ‬

‫‪D‬‬

‫‪B‬‬ ‫‪F‬‬

‫‪2‬‬
‫ﻓﻨﻌﺘﺒﺮﻩ اﺑﻦ أﻳﺴﺮ ﻟﻪ‬ ‫‪ A‬وﻟﻜﻮﻧﻪ اﺻﻐﺮ ﻣﻦ ‪B‬‬ ‫راﺑﻌ ًﺎ‪ -:‬ﻧﺄﺧﺬ اﻟﻌﻨﺼﺮ اﻟﺮاﺑﻊ وهﻮ‬

‫‪D‬‬

‫‪B‬‬ ‫‪F‬‬

‫‪A‬‬

‫‪ B‬ﻣﻦ ﻓﻨﻌﺘﺒﺮﻩ اﺑﻦ أﻳﻤﻦ ﻟﻬﺎ‬ ‫وﻟﻜﻮﻧﻪ اآﺒﺮ‬ ‫ﺧﺎﻣﺴ ًﺎ‪ -:‬ﻧﺄﺧﺬ اﻟﻌﻨﺼﺮ اﻟﺨﺎﻣﺲ وهﻮ ‪C‬‬

‫‪D‬‬

‫‪B‬‬ ‫‪F‬‬

‫‪A‬‬ ‫‪C‬‬

‫وﻟﻜﻮﻧﻪ اﺻﻐﺮ ﻟﺬﻟﻚ ﻓﻨﻌﺘﺒﺮﻩ اﺑﻦ أﻳﺴﺮ ﻟﻬﺎ‬ ‫ﺳﺎدﺳًﺎ‪ -:‬ﻧﺄﺧﺬ اﻟﻌﻨﺼﺮ اﻟﺴﺎدس وهﻮ ‪ E‬وﻧﻘﺎرﻧﻪ ﻣﻊ ﻋﻘﺪ اﻟﺸﺠﺮة ﻧﺠﺪﻩ اﺻﻐﺮ ﻣﻦ اﻟﻌﻘﺪة ‪F‬‬

‫‪D‬‬

‫‪B‬‬ ‫‪F‬‬

‫‪A‬‬ ‫‪C‬‬
‫‪E‬‬

‫وﻧﻘﺎرﻧﻪ ﻣﻊ ﻋﻘﺪ اﻟﺸﺠﺮة ﻧﺠﺪﻩ اآﺒﺮ ﻣﻦ اﻟﻌﻘﺪة ‪ F‬ﻟﺬﻟﻚ ﻓﻨﻌﺘﺒﺮﻩ اﺑﻦ أﻳﻤﻦ ﻟﻬﺎ‬ ‫ﺳﺎﺑﻌ ًﺎ‪ -:‬ﻧﺄﺧﺬ اﻟﻌﻨﺼﺮ اﻟﺴﺎﺑﻊ وهﻮ ‪G‬‬

‫‪D‬‬

‫‪B‬‬ ‫‪F‬‬

‫‪A‬‬ ‫‪C‬‬ ‫‪G‬‬


‫‪E‬‬

‫ﺧﻄﻮات ﺣﺬف ﻋﻘﺪة ﻣﻦ ﺷﺠﺮة اﻟﺒﺤﺚ اﻟﺜﻨﺎﺋﻴﺔ‬


‫* ﺣﺬف ﻋﻘﺪة ﻧﻬﺎﺋﻴﺔ‬
‫وﺗﺘﻀﻤﻦ ﺧﻄﻮﺗﻴﻦ‪-:‬‬
‫‪null‬‬ ‫أ‪ .‬ﻧﺄﺧﺬ اﻟﻌﻘﺪة وﻧﺠﻌﻞ ﻗﻴﻤﺔ ﻣﺆﺷﺮ اﻷب إﻟﻴﻬﺎ‬
‫‪Dispose‬‬ ‫ب‪ .‬ﻧﻠﻐﻲ ﺗﻠﻚ اﻟﻌﻘﺪة‬

‫‪3‬‬
‫ﻣﻦ ﺷﺠﺮة اﻟﺒﺤﺚ اﻟﺜﻨﺎﺋﻴﺔ اﻟﺘﺎﻟﻴﺔ‬ ‫‪A‬‬ ‫ﻣﺜﺎل‪ -:‬اﺣﺬف اﻟﻌﻘﺪة‬

‫‪P‬‬ ‫‪P‬‬
‫اﻟﺸﺠﺮة ﺑﻌﺪ اﻟﺤﺬف‬
‫‪Z‬‬ ‫‪Z‬‬
‫‪J‬‬ ‫‪J‬‬

‫‪A‬‬ ‫‪L‬‬ ‫‪L‬‬

‫* ﺣﺬف ﻋﻘﺪة ﻟﻬﺎ ﻓﺮع واﺣﺪ‬


‫وﺗﺘﻀﻤﻦ ﺧﻄﻮﺗﻴﻦ‪-:‬‬
‫أ‪ .‬ﻧﺠﻌﻞ ﻣﺆﺷﺮ اﻟﻌﻘﺪة اﻷب ﻳﺸﻴﺮ إﻟﻰ اﻟﻌﻘﺪة اﻻﺑﻦ‬
‫‪Dispose‬‬ ‫ب‪ .‬ﻧﻠﻐﻲ ﺗﻠﻚ اﻟﻌﻘﺪة‬
‫ﻣﻦ ﺷﺠﺮة اﻟﺒﺤﺚ اﻟﺜﻨﺎﺋﻴﺔ اﻟﺘﺎﻟﻴﺔ‬ ‫‪C‬‬ ‫ﻣﺜﺎل‪ -:‬اﺣﺬف اﻟﻌﻘﺪة‬

‫‪L‬‬ ‫‪L‬‬
‫اﻟﺸﺠﺮة ﺑﻌﺪ اﻟﺤﺬف‬
‫‪D‬‬ ‫‪P‬‬
‫‪D‬‬ ‫‪P‬‬

‫‪C‬‬ ‫‪H‬‬ ‫‪A‬‬


‫‪H‬‬

‫‪A‬‬
‫‪F‬‬ ‫‪F‬‬

‫* ﺣﺬف ﻋﻘﺪة ﻟﻬﺎ ﻓﺮﻋﺎن‬


‫وﺗﺘﻀﻤﻦ ﻋﺪة ﺧﻄﻮات‪-:‬‬
‫أ‪ .‬ﻧﺴﺘﺒﺪل اﻟﻌﻘﺪة اﻟﻤﻄﻠﻮب ﺣﺬﻓﻬﺎ ﺑﺎﻟﻌﻘﺪة اﻟﺘﺎﻟﻴﺔ ﻟﻬﺎ ﺑﺎﻟﻘﻴﻤﺔ ﻣﻦ اﻟﺸﺠﺮة اﻟﻔﺮﻋﻴﺔ اﻟﻴﺴﺮى او اﻟﻴﻤﻨﻰ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺸﺠﺮة‬
‫ب‪ .‬ﻧﺄﺧﺬ اﻟﺸﺠﺮة اﻟﻔﺮﻋﻴﺔ اﻟﻴﺴﺮى ﻟﻠﻌﻘﺪة )أي اﻟﻌﻘﺪة اﻟﺘﻲ ﻓﻲ ﻳﺴﺎر اﻟﻌﻘﺪة اﻟﻤﻄﻠﻮب ﺣﺬﻓﻬﺎ(‬
‫* إذا ﻟﻢ ﻳﻜﻦ ﻟﻬﺎ ﻓﺮع اﻳﻤﻦ ﻓﺄﻧﻬﺎ ﺗﺼﺒﺢ اﻟﺒﺪﻳﻞ‬
‫* إذا آﺎن ﻟﻬﺎ ﻓﺮع اﻳﻤﻦ ﻓﺈﻧﻨﺎ ﻧﺄﺧﺬ اﻟﻌﻘﺪة ﻓﻲ أﻗﺼﻰ اﻟﻴﻤﻴﻦ ﻟﺘﺼﺒﺢ اﻟﺒﺪﻳﻞ‬

‫‪4‬‬
‫ﻣﻦ ﺷﺠﺮة اﻟﺒﺤﺚ اﻟﺜﻨﺎﺋﻴﺔ اﻟﺘﺎﻟﻴﺔ‬ ‫ﻣﺜﺎل‪ -:‬اﺣﺬف اﻟﻌﻘﺪة ‪q‬‬

‫‪J‬‬

‫‪B‬‬ ‫‪q‬‬

‫‪L‬‬ ‫‪R‬‬

‫‪K‬‬ ‫‪N‬‬ ‫‪Z‬‬

‫‪M‬‬ ‫‪p‬‬

‫اﻟﺸﺠﺮة ﺑﻌﺪ اﻟﺤﺬف‬

‫‪J‬‬

‫‪B‬‬ ‫‪P‬‬

‫‪L‬‬ ‫‪R‬‬

‫‪K‬‬ ‫‪N‬‬ ‫‪Z‬‬

‫‪M‬‬

‫‪-:‬‬ ‫ﻟﺤﺬف اﻟﻌﻘﺪة ‪q‬‬

‫‪R‬‬ ‫و‬ ‫‪L‬‬ ‫ﻻ‪ -:‬ﻧﺠﺪ ان ﻟﻬﺎ ﻓﺮﻋﺎن‬


‫او ً‬
‫ﻟﺬﻟﻚ ﻧﺄﺧﺬ اﻟﻌﻘﺪة اﻟﻤﻮﺟﻮدة ﻓﻲ أﻗﺼﻰ اﻟﻴﻤﻴﻦ ﻟﺘﺼﺒﺢ اﻟﻌﻘﺪة‬ ‫‪N‬‬ ‫وﻧﺠﺪ آﺬﻟﻚ ان ﻟﻪ اﺑﻦ اﻳﻤﻦ وهﻮ‬ ‫‪L‬‬ ‫ﺛﺎﻧﻴًﺎ‪ -:‬ﻧﺎﺧﺬ اﻟﻔﺮع اﻻﻳﺴﺮ وهﻮ‬
‫‪P‬‬ ‫اﻟﺠﺪﻳﺪة وهﻲ‬

‫‪5‬‬

You might also like