1 00:00:00,000 --> 00:00:02,500 [Powered by Google Translate] [অনুচ্ছেদ 7] [কম আরামদায়ক] 2 00:00:02,500 --> 00:00:04,890 [Nate Hardison] [হার্ভার্ড বিশ্ববিদ্যালয়] 3 00:00:04,890 --> 00:00:07,000 [এটি CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:09,080 >> স্বাগতম অনুচ্ছেদ 7. 5 00:00:09,080 --> 00:00:11,330 ধন্যবাদ হারিকেন Sandy, 6 00:00:11,330 --> 00:00:13,440 পরিবর্তে একটি লম্বচ্ছেদ হচ্ছে এই সপ্তাহ, 7 00:00:13,440 --> 00:00:17,650 আমরা এই করছি প্রশ্নের বিভাগের মাধ্যমে হাঁটতে-মাধ্যমে,. 8 00:00:17,650 --> 00:00:22,830 আমি সমস্যা সহ নিম্নলিখিত স্পেসিফিকেশন 6 সেট করা যাচ্ছে না, 9 00:00:22,830 --> 00:00:25,650 এ সমস্ত প্রশ্নের ভিতর দিয়ে যাচ্ছে 10 00:00:25,650 --> 00:00:27,770 প্রশ্ন অধ্যায় একটি অনুচ্ছেদ. 11 00:00:27,770 --> 00:00:30,940 যদি কোন প্রশ্ন আছে, 12 00:00:30,940 --> 00:00:32,960 CS50 আলোচনা এই পোষ্ট করুন. 13 00:00:32,960 --> 00:00:35,480 >> ঠিক আছে. আসুন শুরু করি. 14 00:00:35,480 --> 00:00:40,780 এখন আমি ডান সমস্যা সেট এর স্পেসিফিকেশন পাতা 3 এ খুঁজছি. 15 00:00:40,780 --> 00:00:44,110 আমরা প্রথমে বাইনারি গাছ সম্পর্কে কথা শুরু চলুন 16 00:00:44,110 --> 00:00:47,850 যেহেতু যারা এই সপ্তাহে এর সমস্যা সেট প্রাসঙ্গিকতা অনেক আছে - 17 00:00:47,850 --> 00:00:49,950 Huffman বৃক্ষ এনকোডিং. 18 00:00:49,950 --> 00:00:55,000 এক খুব প্রথম ডাটা স্ট্রাকচার সম্পর্কে আমরা CS50 উপর সায়ীদ ছিল অ্যারে. 19 00:00:55,000 --> 00:01:00,170 মনে রাখবেন যে, একটি অ্যারের হয় উপাদানের একটি ক্রম - 20 00:01:00,170 --> 00:01:04,019 একই ধরনের সব - কণ্ঠস্থ ডান পাশে একে অপরকে. 21 00:01:04,019 --> 00:01:14,420 যদি আমি একটি পূর্ণসংখ্যা অ্যারের যে আমি এই বাক্সে-সংখ্যাগুলি পূর্ণসংখ্যার-শৈলী ব্যবহার আহরণ করতে পারে আছে - 22 00:01:14,420 --> 00:01:20,290 চলুন শুরু করা যাক বলতে আমি প্রথম বাক্সে 5 আছে, আমি দ্বিতীয় 7 আছে, 23 00:01:20,290 --> 00:01:27,760 তারপর আমি 8, 10, 20 এবং চূড়ান্ত বাক্সে আছে. 24 00:01:27,760 --> 00:01:33,000 এই অ্যারে সম্পর্কে মনে রাখবেন, সত্যিই দুটি ভাল জিনিস 25 00:01:33,000 --> 00:01:38,800 হয় যে আমরা এই কোনো নির্দিষ্ট উপাদান যাও ধ্রুবক সময় এক্সেস আছে 26 00:01:38,800 --> 00:01:40,500  অ্যারের যদি আমরা তার সূচক জানি. 27 00:01:40,500 --> 00:01:44,670 উদাহরণস্বরূপ, যদি আমি অ্যারের মধ্যে তৃতীয় উপাদান দখল করতে চান - 28 00:01:44,670 --> 00:01:47,870 সূচিতে 2 আমাদের শূন্য-ভিত্তিক ইন্ডেক্স সিস্টেম ব্যবহার করে - 29 00:01:47,870 --> 00:01:52,220 আমি শুধু আক্ষরিক একটি সহজ গাণিতিক হিসাব করতে হবে, 30 00:01:52,220 --> 00:01:56,170 অ্যারে তদবস্থ যাও প্রস্থান, 31 00:01:56,170 --> 00:01:57,840 8 যে সেখানে সঞ্চিত হয় বৈঠাচালনা আউট, 32 00:01:57,840 --> 00:01:59,260 এবং আমি যেতে ভাল. 33 00:01:59,260 --> 00:02:03,350 >> এই অ্যারে সম্পর্কে খারাপ জিনিস - যে আমরা স্বপ্ন 34 00:02:03,350 --> 00:02:05,010 যখন আমরা আলোচনা লিঙ্ক তালিকা - 35 00:02:05,010 --> 00:02:09,120 হয় যে যদি আমি এই অ্যারের মধ্যে একটি উপাদান প্রবেশ করাতে চান, 36 00:02:09,120 --> 00:02:11,090 আমি কাছাকাছি কিছু নাড়াচাড়া করতে যাচ্ছি. 37 00:02:11,090 --> 00:02:12,940 উদাহরণস্বরূপ, এই অ্যারে অধিকার এখানে 38 00:02:12,940 --> 00:02:16,850 একটি সাজানো ক্রম - অর্ডার আরোহী মধ্যে সাজানো - 39 00:02:16,850 --> 00:02:19,440 5, তারপর তারপর 7, 8, তারপর 10, 20 এবং তারপর - 40 00:02:19,440 --> 00:02:23,100 কিন্তু যদি আমি এই অ্যারের মধ্যে 9 নম্বর প্রবেশ করাতে চান, 41 00:02:23,100 --> 00:02:27,460 আমি উপাদানের কিছু করার স্থান না নামান আছে যাচ্ছি. 42 00:02:27,460 --> 00:02:30,440 আমরা এই আঁকা এখানে দেখতে পারেন. 43 00:02:30,440 --> 00:02:35,650 আমি 5, 7 সরানো আছে যাচ্ছে, এবং তারপর 8 করছি; 44 00:02:35,650 --> 00:02:38,720 একটি ফাঁক যেখানে আমি 9 লাগাতে পারেন তৈরি, 45 00:02:38,720 --> 00:02:45,910 এবং তারপরে 10 এবং 20 9 ডানদিকে যেতে পারেন. 46 00:02:45,910 --> 00:02:49,450 এটি একটি ব্যথা ধরনের কারণ খারাপ-ক্ষেত্রে দৃশ্যকল্প - 47 00:02:49,450 --> 00:02:54,350 যখন আমরা প্রবেশ করাতে প্রারম্ভে বা শেষ হয় ভোগ করছি 48 00:02:54,350 --> 00:02:56,040 কিভাবে অ্যারের উপর নির্ভর করে, আমরা নাড়াচাড়া করছি - 49 00:02:56,040 --> 00:02:58,850 আমরা আপ উপাদানের সমস্ত নামান থাকার শেষ হতে পারে 50 00:02:58,850 --> 00:03:00,750 আমরা বর্তমানে যে অ্যারের মধ্যে সংরক্ষণ করছেন. 51 00:03:00,750 --> 00:03:03,810 >> সুতরাং, কি ছিল এই সমস্যা এড়ানোর উপায়? 52 00:03:03,810 --> 00:03:09,260 এই সমস্যা এড়ানোর উপায় আমাদের সংযুক্ত-তালিকা পদ্ধতি যেখানে যেতে ছিল - 53 00:03:09,260 --> 00:03:19,820 পরিবর্তে উপাদান 5, 7, 8, 10, 20 এবং মেমরির মধ্যে সমস্ত পরবর্তী প্রতিটি অন্যান্য সংরক্ষণ - 54 00:03:19,820 --> 00:03:25,630 এর পরিবর্তে আমরা কি কি ছিল যেখানেই আমরা তাদের সঞ্চয় চেয়েছিলেন এর সঞ্চয় ধরনের তাদের 55 00:03:25,630 --> 00:03:32,470 এই সংযুক্ত-তালিকা নোড যা আমি এখানে অঙ্কন তদর্থক ধরনের করছি,. 56 00:03:32,470 --> 00:03:42,060 এবং তারপর আমরা তাদের একসঙ্গে ছিলেন এই পরের পয়েন্টার ব্যবহার করে. 57 00:03:42,060 --> 00:03:44,370 আমি 5 থেকে 7 একটি পয়েন্টার হতে পারে, 58 00:03:44,370 --> 00:03:46,420 থেকে 7 8 যাও একটি পয়েন্টার, 59 00:03:46,420 --> 00:03:47,770 8 থেকে 10 একটি পয়েন্টার, 60 00:03:47,770 --> 00:03:51,220 এবং পরিশেষে, 10 থেকে 20 তে একটি পয়েন্টার, 61 00:03:51,220 --> 00:03:54,880 এবং তারপর 20 এ একটি নাল পয়েন্টার বোঝা যায় যে কিছুই বাম আছে. 62 00:03:54,880 --> 00:03:59,690 ট্রেড বন্ধ যে আমরা এখানে আছে 63 00:03:59,690 --> 00:04:05,360 এখন মনে হয় যে যদি আমরা আমাদের অনুসারে সাজানো তালিকা মধ্যে 9 নম্বর প্রবেশ করাতে চান, 64 00:04:05,360 --> 00:04:08,270 সমস্ত আমরা করতে হবে তা হচ্ছে 9 সঙ্গে একটি নতুন নোড নির্মাণ, 65 00:04:08,270 --> 00:04:12,290 এটা উপযুক্ত স্থান নির্দেশ করার জন্য টেলিগ্রাম, 66 00:04:12,290 --> 00:04:20,630 এবং তারপর পুনরায় তারের 8 9 ডাউন দিকে নির্দেশ করে. 67 00:04:20,630 --> 00:04:25,660 যে বেশ দ্রুত, অভিমানী আমরা ঠিক জানি যেখানে আমরা 9 ​​সন্নিবেশ করতে চান. 68 00:04:25,660 --> 00:04:32,610 কিন্তু এই বিনিময়ে ট্রেড বন্ধ হল যে এখন আমরা ধ্রুবক সময় এক্সেস হারিয়ে ফেলেছি 69 00:04:32,610 --> 00:04:36,230 কোন তথ্য আমাদের কাঠামো বিশেষ উপাদান. 70 00:04:36,230 --> 00:04:40,950 উদাহরণস্বরূপ, যদি আমি এই সংযুক্ত তালিকার চতুর্থ উপাদান খুঁজতে চান, 71 00:04:40,950 --> 00:04:43,510 আমি তালিকার খুব প্রারম্ভে শুরু করতে যাচ্ছি 72 00:04:43,510 --> 00:04:48,930 এবং নোড দ্বারা নোড গণনা মাধ্যমে আমার পথ পর্যন্ত আমি চতুর্থ এক কাজ খুঁজতে. 73 00:04:48,930 --> 00:04:55,870 >> যাতে ভাল একটি লিঙ্ক তালিকা তুলনায় কর্মক্ষমতা এক্সেস পেতে পারেন - 74 00:04:55,870 --> 00:04:59,360 কিন্তু বেনিফিট যে আমরা তা নিয়ে কিছু ধরে রাখা 75 00:04:59,360 --> 00:05:01,800 একটি লিঙ্ক তালিকা থেকে সন্নিবেশ সময় শর্তাদি - 76 00:05:01,800 --> 00:05:05,750 একটি বাইনারি গাছ যাও যাও একটু বেশি মেমরি ব্যবহার করার প্রয়োজন হবে. 77 00:05:05,750 --> 00:05:11,460 বিশেষ করে, পরিবর্তে শুধুমাত্র একটি বাইনারি গাছ নোডের মধ্যে একটি হচ্ছে পয়েন্টার - 78 00:05:11,460 --> 00:05:13,350 সংযুক্ত-তালিকা ভালো নোড আছে - 79 00:05:13,350 --> 00:05:16,950 আমরা বাইনারি গাছ নোডের একটি দ্বিতীয় পয়েন্টার যুক্ত চলুন. 80 00:05:16,950 --> 00:05:19,950 বরং ঠিক পরের উপাদান এক পয়েন্টার হচ্ছে, 81 00:05:19,950 --> 00:05:24,420 আমরা একটি শিশুর বাম এবং ডান একটি শিশু একটি পয়েন্টার আছে চলুন. 82 00:05:24,420 --> 00:05:26,560 >> চলুন কি যে আসলে মতো দেখতে দেখতে একটি ছবি আঁকা. 83 00:05:26,560 --> 00:05:31,350 আবার, আমি এইসব বাক্সে এবং তীরচিহ্ন ব্যবহার করতে যাচ্ছি. 84 00:05:31,350 --> 00:05:37,150 একটি বাইনারি গাছ নোডের মধ্যে মাত্র একটি সহজ বক্স দিয়ে শুরু চালু হবে. 85 00:05:37,150 --> 00:05:40,940 এটা মান জন্য একটি স্থান আছে যাচ্ছে, 86 00:05:40,940 --> 00:05:47,280 এবং তারপর এটা বাম ও ডান শিশু সন্তানের জন্য একটি স্থান আছে যাচ্ছে. 87 00:05:47,280 --> 00:05:49,280 আমি এখানে তাদের লেবেল যাচ্ছি. 88 00:05:49,280 --> 00:05:57,560 আমরা বাম সন্তান আছে যাচ্ছে, এবং করছি তারপর আমরা শিশু অধিকার আছে চলুন. 89 00:05:57,560 --> 00:05:59,920 অনেক এই কাজ করার বিভিন্ন উপায় আছে. 90 00:05:59,920 --> 00:06:02,050 কখনও কখনও জন্য স্থান এবং সুবিধার্থে, 91 00:06:02,050 --> 00:06:06,460 আমি আসলে এটা ভালো আমি নিচ করছে এখানে করছি আঁকা করব 92 00:06:06,460 --> 00:06:10,910 যেখানে আমি উপরের মূল্য আছে চলেছি, 93 00:06:10,910 --> 00:06:14,060 এবং তারপর নিচে ডান দিকে ডান সন্তান, 94 00:06:14,060 --> 00:06:16,060 এবং নিচের বাম দিকের বাম সন্তান. 95 00:06:16,060 --> 00:06:20,250 উপরের এই চিত্রটি যাব ফিরে, 96 00:06:20,250 --> 00:06:22,560 আমরা খুব উপরের মূল্য আছে, 97 00:06:22,560 --> 00:06:25,560 তারপর আমরা বাম সন্তান পয়েন্টার আছে, এবং তারপর আমরা ডান সন্তানের পয়েন্টার আছে. 98 00:06:25,560 --> 00:06:30,110 >> ইন সমস্যা সেট স্পেসিফিকেশন, 99 00:06:30,110 --> 00:06:33,110 আমরা একটি নোডের মধ্যে যে একটা মূল্য আছে 7 অঙ্কন সম্পর্কে কথা বলতে, 100 00:06:33,110 --> 00:06:39,750 এবং তারপর একটি বাম সন্তান যে নাল পয়েন্টার, এবং একটি সঠিক সন্তান যে নাল পয়েন্টার. 101 00:06:39,750 --> 00:06:46,040 আমরা উভয় স্থান মূলধন শূন্য জন্য লিখতে পারেন 102 00:06:46,040 --> 00:06:51,610 বাম এবং ডান উভয় সন্তানের সন্তান, অথবা আমরা এই তির্যক স্ল্যাশ আহরণ করতে পারে 103 00:06:51,610 --> 00:06:53,750 এর মাধ্যমে বাক্সে প্রতিটি এটা নাল নির্দেশ. 104 00:06:53,750 --> 00:06:57,560 আমি যে মাত্র কারণ যে সহজ করতে যাচ্ছি. 105 00:06:57,560 --> 00:07:03,700 আপনি কি এখানে দেখতে হয় একটি খুব সহজ বাইনারি গাছ নোড diagramming দুটি উপায় 106 00:07:03,700 --> 00:07:07,960 যেখানে আমরা মান 7 এবং সন্তানের নাল পয়েন্টার আছে. 107 00:07:07,960 --> 00:07:15,220 >> কিভাবে আমাদের সাথে লিঙ্ক তালিকা স্পেসিফিকেশন সম্পর্কে আলোচনা দ্বিতীয় অংশ - 108 00:07:15,220 --> 00:07:18,270 মনে রাখবেন, আমরা শুধুমাত্র প্রথম উপাদান একটি তালিকার উপর রাখা ছিল 109 00:07:18,270 --> 00:07:20,270 সমগ্র তালিকা স্মরণ - 110 00:07:20,270 --> 00:07:26,140 এবং অনুরূপভাবে একটি বাইনারি ট্রি সহ, আমরা এক পয়েন্টার উপর রাখা গাছ শুধুমাত্র আছে 111 00:07:26,140 --> 00:07:31,120 যাতে সম্পূর্ণ ডাটা স্ট্রাকচার উপর নিয়ন্ত্রণ বজায় রাখার জন্য. 112 00:07:31,120 --> 00:07:36,150 এই ট্রি একটি বিশেষ উপাদান ট্রি রুট নোড নামে অভিহিত করা হয়. 113 00:07:36,150 --> 00:07:43,360 উদাহরণস্বরূপ, যদি এই একটি নোড - এই নোডের মান ধারণকারী 7 114 00:07:43,360 --> 00:07:45,500 সঙ্গে নাল বাম এবং ডান সন্তানের পয়েন্টার - 115 00:07:45,500 --> 00:07:47,360 গাছ ছিল আমাদের মধ্যে কেবল মান, 116 00:07:47,360 --> 00:07:50,390 তারপর এই আমাদের রুট নোড হবে. 117 00:07:50,390 --> 00:07:52,240 এটা খুব গাছ আমাদের শুরুতে. 118 00:07:52,240 --> 00:07:58,530 এই আমরা একটু দেখতে আরো পরিষ্কারভাবে একবার আমরা শুরু গাছ আমাদের আরো নোড যোগ করতে পারেন. 119 00:07:58,530 --> 00:08:01,510 আমাকে একটি নতুন পাতা মুঠি ধরে টেনে তুলবো. 120 00:08:01,510 --> 00:08:05,000 >> এখন আমরা একটি গাছ যে root-এ রয়েছে 7 আঁকা চলুন, 121 00:08:05,000 --> 00:08:10,920 শিশু এবং বাম, ডান এবং শিশুর 9 ভিতর 3 ভিতরে. 122 00:08:10,920 --> 00:08:13,500 আবার, এটা বেশ সহজ. 123 00:08:13,500 --> 00:08:26,510 আমরা 7 পেয়েছেন, 3 জন্য একটি নোড, 9 জন্য একটি নোড আঁকা, 124 00:08:26,510 --> 00:08:32,150 এবং আমি 7 নোড 3 ধারণকারী নির্দেশ বাম সন্তানের পয়েন্টার সেট চলেছি, 125 00:08:32,150 --> 00:08:37,850 এবং নোড নোড 9 ধারণকারী 7 ধারণকারী ডান সন্তানের পয়েন্টার. 126 00:08:37,850 --> 00:08:42,419 এখন, 3 এবং 9 কোনো সন্তান থাকে না, 127 00:08:42,419 --> 00:08:48,500 আমরা তাদের সন্তানের পয়েন্টার সমস্ত ফাঁকা সেট চলুন. 128 00:08:48,500 --> 00:08:56,060 এখানে, আমাদের ট্রি রুট নোড নম্বর 7 ধারণকারী অনুরূপ. 129 00:08:56,060 --> 00:09:02,440 আপনি যে সব দেখতে যদি আমরা আছে যে রুট নোড একটা পয়েন্টার করতে পারেন, 130 00:09:02,440 --> 00:09:07,330 তারপর আমরা আমাদের গাছ মাধ্যমে হাঁটতে পারা এবং উভয় সন্তানের নোড অ্যাক্সেস করতে পারেন - 131 00:09:07,330 --> 00:09:10,630 উভয় 3 এবং 9. 132 00:09:10,630 --> 00:09:14,820 কোনো প্রতি ট্রি একক নোড যাও পয়েন্টার বজায় রাখা প্রয়োজন. 133 00:09:14,820 --> 00:09:22,080 ঠিক আছে. এখন আমরা এই চিত্রটি অন্য একটি নোড যোগ চলুন. 134 00:09:22,080 --> 00:09:25,370 আমরা একটি নোড 6 ধারণকারী যোগ চলুন, 135 00:09:25,370 --> 00:09:34,140 এবং আমরা নোড 3 ধারণকারী শিশু অধিকার হিসাবে এই যোগ চলুন. 136 00:09:34,140 --> 00:09:41,850 যে না, আমি 3-নোডের মধ্যে যে নাল পয়েন্টার নিশ্চিহ্ন করা যাচ্ছে না 137 00:09:41,850 --> 00:09:47,750 এবং এটি আপ নোড 6 ধারণকারী নির্দেশ টেলিগ্রাম. ঠিক আছে. 138 00:09:47,750 --> 00:09:53,800 >> এই সময়ে, আসুন এর একটি পরিভাষা একটু ঝালিয়ে নেওয়া. 139 00:09:53,800 --> 00:09:58,230 যাও কারণে যে এই একটি বিশেষ বাইনারি গাছ বলা হয় শুরু, 140 00:09:58,230 --> 00:10:00,460 যে দুই সন্তানের পয়েন্টার আছে. 141 00:10:00,460 --> 00:10:06,020 গাছ যে আরো সন্তানের পয়েন্টার আছে অন্য ধরনের আছে. 142 00:10:06,020 --> 00:10:10,930 বিশেষ করে, আপনি একটি সমস্যা সেট করুন 5 'চেষ্টা' did. 143 00:10:10,930 --> 00:10:19,310 আপনি যে ব্যবহার করে দেখুন যে লক্ষ্য করা হবে, আপনি 27 বিভিন্ন শিশুদের বিভিন্ন পয়েন্টার ছিল - 144 00:10:19,310 --> 00:10:22,410 ইংরেজি বর্ণমালার মধ্যে 26 অক্ষরের জন্য প্রত্যেক এক, 145 00:10:22,410 --> 00:10:25,410 এবং তারপর ঊর্ধকমা জন্য 27 তম - 146 00:10:25,410 --> 00:10:28,900 তাই, যে অনুরূপ ট্রি একটি ধরন. 147 00:10:28,900 --> 00:10:34,070 কিন্তু এখানে এটি এর বাইনারি থেকে,, আমরা কেবল দুই সন্তানের পয়েন্টার আছে. 148 00:10:34,070 --> 00:10:37,880 >> এই রুট নোড যে আমরা স্বপ্ন ছাড়াও, 149 00:10:37,880 --> 00:10:41,470 আমরা করেছি এই শব্দটি প্রায় 'সন্তান.' নিক্ষেপ করা হয়েছে 150 00:10:41,470 --> 00:10:44,470 কি জন্য একটি নোড অন্য নোডের একটি শিশু হতে চাওয়ার কথা বলছেন কি? 151 00:10:44,470 --> 00:10:54,060 এটা আক্ষরিক মানে হল একটি চাইল্ড নোড হল অন্য একটি নোডের একটি শিশু 152 00:10:54,060 --> 00:10:58,760 যদি যে অন্যান্য নোডের চাইল্ড নোড যে নির্দেশ সেট পয়েন্টার এক হয়েছে. 153 00:10:58,760 --> 00:11:01,230 এই আরো কংক্রিট পদ পুরা, 154 00:11:01,230 --> 00:11:11,170 যদি 3 থেকে 7 চাইল্ড পয়েন্টার এক দ্বারা জোরাল হয়, তাহলে 3 7 সন্তান. 155 00:11:11,170 --> 00:11:14,510 যদি আমরা চিন্তা কি 7 সন্তান ছিল - 156 00:11:14,510 --> 00:11:18,510 ভাল, আমরা দেখতে যে 7 3 যাও একটি পয়েন্টার এবং 9 একটি ইশারা আছে, 157 00:11:18,510 --> 00:11:22,190 তাই 9 এবং 3 হয় 7 শিশুদের. 158 00:11:22,190 --> 00:11:26,650 নাইন কোন সন্তান থাকে কারণ তার সন্তানের নাল পয়েন্টার হয়, 159 00:11:26,650 --> 00:11:30,940 এবং 3 শুধুমাত্র এক শিশু, 6 আছে. 160 00:11:30,940 --> 00:11:37,430 ছয় এছাড়াও কোন শিশু রয়েছে কারণ এর পয়েন্টার উভয় নাল হয়, যা আমরা এখন অধিকার আঁকা হবে. 161 00:11:37,430 --> 00:11:45,010 >> উপরন্তু, আমরা একটি বিশেষ নোডের মধ্যে পিতামাতারা এ সম্পর্কে কথা বলা, 162 00:11:45,010 --> 00:11:51,100 এবং এই হল, আপনি আশা করতে চাই, এই শিশু বর্ণনার বিপরীত. 163 00:11:51,100 --> 00:11:58,620 পরিবর্তে দুটি হিসাবে আপনি মানুষের প্রত্যাশা হতে পারে - প্রতিটি নোডের শুধুমাত্র এক ঊর্ধ্বতন আছে. 164 00:11:58,620 --> 00:12:03,390 উদাহরণস্বরূপ, 3 মা বাবা হয় 7. 165 00:12:03,390 --> 00:12:10,800 9 অভিভাবক হয় 7, 6 এবং পিতা বা মাতা হয় 3. এটা যাও নেই. 166 00:12:10,800 --> 00:12:15,720 আমরা grandparents এবং grandchildren সম্বন্ধেই পদ আছে, 167 00:12:15,720 --> 00:12:18,210 এবং আরো সাধারণভাবে আমরা পূর্বপুরুষ সম্পর্কে কথা বলা 168 00:12:18,210 --> 00:12:20,960 এবং একটি নির্দিষ্ট নোড উত্তরপুরুষ. 169 00:12:20,960 --> 00:12:25,710 একটি নোডের মধ্যে পূর্বপুরুষ - বা পূর্বপুরুষ পরিবর্তে, একটি নোডের মধ্যে, - 170 00:12:25,710 --> 00:12:32,730 হয় নোড থেকে root পরিচয়ে যে নোড পাথ যে থাকা সব. 171 00:12:32,730 --> 00:12:36,640 উদাহরণস্বরূপ, যদি আমি নোড 6 খুঁজছি, 172 00:12:36,640 --> 00:12:46,430 তারপর পূর্বপুরুষ উভয় 3 এবং 7 হতে যাচ্ছে. 173 00:12:46,430 --> 00:12:55,310 উদাহরণস্বরূপ 9 পূর্বপুরুষ,, হয় - যদি আমি নোড 9 এ খুঁজছি - 174 00:12:55,310 --> 00:12:59,990 তারপর 9 পূর্বপুরুষ শুধুমাত্র 7. 175 00:12:59,990 --> 00:13:01,940 এবং উত্তরপুরুষ হয় ঠিক বিপরীত. 176 00:13:01,940 --> 00:13:05,430 যদি আমি 7 উত্তরপুরুষ সব তাকান করতে চান, 177 00:13:05,430 --> 00:13:11,020 তারপর আমি এটা অধ নোডের মধ্যে সমস্ত তাকান আছে. 178 00:13:11,020 --> 00:13:16,950 সুতরাং, আমি 3, 9, এবং 7 উত্তরপুরুষ হিসাবে 6 সব আছে. 179 00:13:16,950 --> 00:13:24,170 >> চূড়ান্ত শব্দটি যে আমরা যে বিষয়ে কথা বলা করবেন তা হচ্ছে একটি সহোদর এই ধারণা. 180 00:13:24,170 --> 00:13:27,980 সহোদর - এইসব পরিবার শর্তাবলী অনুসরণ বরাবর ধরনের - 181 00:13:27,980 --> 00:13:33,150 হয় নোড গাছ একই পর্যায়ে যে হয়. 182 00:13:33,150 --> 00:13:42,230 সুতরাং, 3 এবং 9 ভাইবোন আছে কারণ তারা গাছ একই পর্যায়ে রয়েছে. 183 00:13:42,230 --> 00:13:46,190 তারা উভয় একই পিতা বা মাতা, 7 আছে. 184 00:13:46,190 --> 00:13:51,400 6 কোন ভাইবোন থাকে কারণ 9 কোনো সন্তান থাকে না. 185 00:13:51,400 --> 00:13:55,540 এবং 7 কারণ এটি আমাদের ট্রি রুট আছে ভাইবোন না, 186 00:13:55,540 --> 00:13:59,010 এবং শুধুমাত্র কখনও 1 রুট আছে. 187 00:13:59,010 --> 00:14:02,260 জন্য 7 ভাইবোন আছে সেখানে 7 উপরের একটি নোড হতে হবে. 188 00:14:02,260 --> 00:14:07,480 আছে যাও 7 মা বাবা, যে ক্ষেত্রে 7 আর ট্রি রুট পর্যন্ত করা হবে না. 189 00:14:07,480 --> 00:14:10,480 তারপর যে 7 এর নতুন একটি শিশুর পিতা বা মাতা এছাড়াও আছে থাকবে, 190 00:14:10,480 --> 00:14:16,480 এবং তারপর যে শিশু হতে 7 ভাইবোন হবে. 191 00:14:16,480 --> 00:14:21,040 >> ঠিক আছে. মুভিং উপর. 192 00:14:21,040 --> 00:14:24,930 যখন আমরা বাইনারি গাছ আমাদের আলোচনার শুরু, 193 00:14:24,930 --> 00:14:28,790 আমরা কিভাবে আমরা তাদের ব্যবহার চালু ছিল স্বপ্ন 194 00:14:28,790 --> 00:14:32,800 উভয় অ্যারে এবং সংযুক্ত তালিকার উপর একটি সুবিধা লাভ করে. 195 00:14:32,800 --> 00:14:37,220 এবং আমাদের যে কি চলুন এই ক্রম সম্পত্তি হয়. 196 00:14:37,220 --> 00:14:41,080 আমরা বলতে স্পেসিফিকেশন অনুযায়ী যে বাইনারি গাছ নির্দেশ দেওয়া হয়, 197 00:14:41,080 --> 00:14:45,740 যদি আমাদের জন্য গাছ প্রতিটি নোডের মধ্যে, বাম দিকে তার সেই বংশধরেরা সব - 198 00:14:45,740 --> 00:14:48,670 বাম এবং বাম শিশু সন্তানের উত্তরপুরূষ সব - 199 00:14:48,670 --> 00:14:54,510 কম মান, এবং ডানদিকে নোড সব আছে - 200 00:14:54,510 --> 00:14:57,770 শিশু অধিকার এবং অধিকার সন্তানের উত্তরপুরূষ সব - 201 00:14:57,770 --> 00:15:02,800 নোড বর্তমান নোড মান যে আমরা এ খুঁজছেন তার চেয়ে অনেক বেশী আছে. 202 00:15:02,800 --> 00:15:07,850 শুধু সরলতার জন্য, আমরা আমাদের যে কোন ট্রির প্রতিলিপি নোড আছে ধরে নিই চলুন. 203 00:15:07,850 --> 00:15:11,180 এই গাছ উদাহরণস্বরূপ, আমরা মামলা নিয়ে যাচ্ছেন না 204 00:15:11,180 --> 00:15:13,680 যেখানে আমরা root-এ মান 7 আছে 205 00:15:13,680 --> 00:15:16,720  এবং তারপর আমরা মান 7 স্থানের গাছ আছে. 206 00:15:16,720 --> 00:15:24,390 এই ক্ষেত্রে, আপনি যে প্রকৃতপক্ষে এই গাছ ক্রমাঙ্কিত বিজ্ঞপ্তি পাবেন. 207 00:15:24,390 --> 00:15:26,510 আমরা root-এ মান 7 আছে. 208 00:15:26,510 --> 00:15:29,720 7 বাঁদিকে সব - 209 00:15:29,720 --> 00:15:35,310 যদি আমি এখানে এই সামান্য চিহ্ন সব পূর্বাবস্থা - 210 00:15:35,310 --> 00:15:40,450 7 বাঁদিকে সবকিছু - 3 এবং 6 - 211 00:15:40,450 --> 00:15:49,410 যারা মান উভয় 7 কম, এবং ডান সবকিছু - যা শুধুমাত্র এই 9 - 212 00:15:49,410 --> 00:15:53,450 7 তার চেয়ে অনেক বেশী. 213 00:15:53,450 --> 00:15:58,650 >> এই আদেশ শুধুমাত্র ট্রি ধারণকারী এই মানগুলি হল না, 214 00:15:58,650 --> 00:16:03,120 কিন্তু যাক এর একটি কতেক আরো আঁকা. 215 00:16:03,120 --> 00:16:05,030 এটি আসলে একটি উপায় আছে যে আমরা এটা করতে পারেন আভা. 216 00:16:05,030 --> 00:16:09,380 আমি একটা জিনিসের সাঁটে লেখার সহজ যেখানে রেখে ব্যবহার করতে যাচ্ছি - 217 00:16:09,380 --> 00:16:11,520 বরং অঙ্কন পুরো বাক্সে এবং--তীরচিহ্ন আউট - 218 00:16:11,520 --> 00:16:14,220 আমি শুধু নম্বর এবং আঁকা তাদের সাথে সংযোগ তীরচিহ্ন যোগ যাচ্ছে. 219 00:16:14,220 --> 00:16:22,920 যাও, শুরু মাত্র আমরা আমাদের আসল গাছ আবার লিখুন যেখানে আমরা 7 ছিল করব, এবং তারপর একটি 3, 220 00:16:22,920 --> 00:16:25,590 এবং তারপর 3 6 অধিকার ফিরে তীক্ষ্ন, 221 00:16:25,590 --> 00:16:30,890 7 এবং একটি শিশু যে অধিকার ছিল 9 ছিল. 222 00:16:30,890 --> 00:16:33,860 ঠিক আছে. অন্য উপায় যে আমরা এই গাছ লিখতে পারেন কি? 223 00:16:33,860 --> 00:16:38,800 পরিবর্তে 3 মধ্যে 7 বাম সন্তানের হতে, 224 00:16:38,800 --> 00:16:41,360 আমরা পারে 6 7 বাম সন্তানের হতে, 225 00:16:41,360 --> 00:16:44,470 এবং তারপর 3 6 বাম সন্তান হতে. 226 00:16:44,470 --> 00:16:48,520 যে এই গাছ মত ডান এখানে যেখানে আমি 7 পেয়েছেন দেখাবে, 227 00:16:48,520 --> 00:16:57,860 তারপর তারপর 6, 3, এবং ডানদিকে একটি 9. 228 00:16:57,860 --> 00:17:01,490 আমরা আমাদের রুট নোড হিসাবে 7 আছে না আছে. 229 00:17:01,490 --> 00:17:03,860 আমরা আমাদের রুট নোড হিসাবে 6 পারে. 230 00:17:03,860 --> 00:17:06,470 ভালো কি যে দেখাবে? 231 00:17:06,470 --> 00:17:09,230 যদি আমরা এই আদেশ সম্পত্তি রক্ষা চলুন, 232 00:17:09,230 --> 00:17:12,970 6 বাম পাশাপাশি এটি চেয়ে কম হয়েছে. 233 00:17:12,970 --> 00:17:16,540 শুধুমাত্র এক সম্ভাবনা আছে, এবং যে এর 3. 234 00:17:16,540 --> 00:17:19,869 6 শিশু অধিকার হিসাবে কিন্তু তারপর, আমরা দুটি সম্ভাবনা আছে. 235 00:17:19,869 --> 00:17:25,380 প্রথমত, আমরা 7 আছে এবং তারপর 9 পারে, 236 00:17:25,380 --> 00:17:28,850 অথবা আমরা তা আঁকতে পারে - যেমন আমি আমার এখানে কি না - 237 00:17:28,850 --> 00:17:34,790 যেখানে আমরা 6 ডান সন্তান হিসাবে 9 আছে, 238 00:17:34,790 --> 00:17:39,050 এবং তারপর 9 বাম সন্তান হিসাবে 7. 239 00:17:39,050 --> 00:17:44,240 >> এখন, 7 6 এবং root-র জন্য শুধুমাত্র সম্ভাব্য মান হল না. 240 00:17:44,240 --> 00:17:50,200 আমরা এও হতে পারে 3 root-এ করা. 241 00:17:50,200 --> 00:17:52,240 যদি 3 root-এ হয় তাহলে কি হবে? 242 00:17:52,240 --> 00:17:54,390 এখানে, জিনিসপত্র পেতে একটু বিট আকর্ষণীয়. 243 00:17:54,390 --> 00:17:58,440 তিনটি কোনো মান হল এটি কম নেই, 244 00:17:58,440 --> 00:18:02,070 তাই কেবল যে সমগ্র গাছ বাম দিকে যাও নাল হতে যাচ্ছে. 245 00:18:02,070 --> 00:18:03,230 এর থেকে কিছু করা যাচ্ছে না এখন পর্যন্ত. 246 00:18:03,230 --> 00:18:07,220 ডান যাও, আমরা অর্ডার আরোহী বিভিন্ন জিনিষ তালিকা পারে. 247 00:18:07,220 --> 00:18:15,530 আমরা 3, তারপর 6, তারপর 7, তারপর 9 পারে. 248 00:18:15,530 --> 00:18:26,710 অথবা, আমরা কি তাহলে 3, 6 পারে, তারপর 9, তারপর 7. 249 00:18:26,710 --> 00:18:35,020 অথবা, আমরা কি তাহলে 3, 7 পারে, তারপর 6, তারপর 9. 250 00:18:35,020 --> 00:18:40,950 বা, 3, 7 - আসলে নেই, আমরা আর একটি 7 না পারেন. 251 00:18:40,950 --> 00:18:43,330 যে আছে আমাদের এক জিনিস. 252 00:18:43,330 --> 00:18:54,710 আমরা 9 ​​করবেন, এবং তারপর পারেন 9 থেকে আমরা 6 করবেন এবং তারপর 7 পারেন. 253 00:18:54,710 --> 00:19:06,980 অথবা, আমরা কি তাহলে 3, 9 পারেন, তারপর 7, তারপর এবং 6. 254 00:19:06,980 --> 00:19:12,490 >> একটি বিষয় এখানে আপনার দৃষ্টি আকর্ষণ করতে হয় 255 00:19:12,490 --> 00:19:14,510 এই যে গাছ হয় একটু অদ্ভুত সুদর্শন. 256 00:19:14,510 --> 00:19:17,840 বিশেষত, যদি আমরা ডান পাশের 4 গাছ তাকান - 257 00:19:17,840 --> 00:19:20,930 আমি তাদের বৃত্ত, এখানে পাবেন - 258 00:19:20,930 --> 00:19:28,410 এই ট্রি একটি লিঙ্ক তালিকা অনুরূপ অংশবিশেষ. 259 00:19:28,410 --> 00:19:32,670 প্রতিটি নোডের শুধুমাত্র একটি শিশু আছে, 260 00:19:32,670 --> 00:19:38,950 এবং তাই আমরা এই গাছ মত কাঠামো, যা আমরা দেখতে কোনো উদাহরণ জন্য না,, 261 00:19:38,950 --> 00:19:44,720  এই এক নির্জন এখানে উপর থেকে নিচ বাম দিকের গাছ. 262 00:19:44,720 --> 00:19:52,490 আসলে এই গাছ হয় বাইনারি গাছ অধ: পতিত বলা হয়, 263 00:19:52,490 --> 00:19:54,170 এবং আমরা এই সম্পর্কে ভবিষ্যতে আরো কথা বলা হবে - 264 00:19:54,170 --> 00:19:56,730 বিশেষ করে যদি আপনার অন্যান্য কম্পিউটার বিজ্ঞান কোর্স নিতে নেভিগেশন এড়িয়ে যান. 265 00:19:56,730 --> 00:19:59,670 এই বৃক্ষ হল অধঃপতিত. 266 00:19:59,670 --> 00:20:03,780 এগুলি কারণ প্রকৃতপক্ষে, এই কাঠামো নিজেই ধার খুব দরকারী না 267 00:20:03,780 --> 00:20:08,060  যাও বার অনুরূপ একটি লিঙ্ক তালিকার যে লুকআপ. 268 00:20:08,060 --> 00:20:13,050 এই অতিরিক্ত পয়েন্টার - আমরা অতিরিক্ত মেমরি সুবিধা গ্রহণ না পাওয়া - 269 00:20:13,050 --> 00:20:18,840 কারণ আমাদের এই কাঠামো উপায় হচ্ছে খারাপ. 270 00:20:18,840 --> 00:20:24,700 বরং নেভিগেশন এড়িয়ে যান এবং বাইনারি গাছ যে root-এ 9 আছে আঁকা আউট, 271 00:20:24,700 --> 00:20:27,220 যা চূড়ান্ত কেস যে আমরা চাই, 272 00:20:27,220 --> 00:20:32,380 আমরা পরিবর্তে এই সময়ে, এই শব্দটি সম্পর্কে অন্য একটি সামান্য বিট কথা বলা যাচ্ছে 273 00:20:32,380 --> 00:20:36,150 আমরা যে গাছ, যার উচ্চতা বলা হয় সম্পর্কে যখন কথা বলা ব্যবহার. 274 00:20:36,150 --> 00:20:45,460 >> একটি গাছ এর উচ্চতা হল থেকে root পরিচয়ে সর্বাপেক্ষা দূরবর্তী নোডের মধ্যে দূরত্ব, 275 00:20:45,460 --> 00:20:48,370 বরং বা হপস সংখ্যা যে আপনি যাতে থাকবে 276 00:20:48,370 --> 00:20:53,750 রুট থেকে শুরু এবং তারপর গাছ মধ্যে সর্বাপেক্ষা দূরবর্তী নোড আপ শেষ. 277 00:20:53,750 --> 00:20:57,330 যদি আমরা কিছু এই গাছের যে মুহূর্তে আমরা এখানে টানা করেছি, চেহারা 278 00:20:57,330 --> 00:21:07,870 আমরা 3 দেখতে পারেন যে যদি আমরা উপরের বাম প্রান্তে এই গাছ নিতে এবং আমরা শুরু, 279 00:21:07,870 --> 00:21:14,510 তারপর আমরা 1 হপ 6 পেতে, একটি দ্বিতীয় হপ 7 পেতে করা আছে, 280 00:21:14,510 --> 00:21:20,560 এবং একটি তৃতীয় হপ 9 পেতে. 281 00:21:20,560 --> 00:21:26,120 সুতরাং, এই গাছ উচ্চতা হল 3. 282 00:21:26,120 --> 00:21:30,640 আমরা এই সবুজ গাছ রূপরেখা জন্য একই ব্যায়াম করতে পারেন, 283 00:21:30,640 --> 00:21:40,100 এবং আমরা দেখতে যে এই গাছের সমস্ত উচ্চতা হয় প্রকৃতপক্ষে 3. 284 00:21:40,100 --> 00:21:45,230 এটা কি তোলে তাদের অবক্ষয়িত অংশ - 285 00:21:45,230 --> 00:21:53,750 যে তাদের উচ্চতা শুধুমাত্র সম্পূর্ণ গাছ বিভিন্ন নোডের সংখ্যার চেয়ে এক কম. 286 00:21:53,750 --> 00:21:58,400 যদি আমরা এই অন্যান্য অন্যদিকে গাছ যে লাল সঙ্গে পরিবৃত, তাকান, 287 00:21:58,400 --> 00:22:03,920 আমরা দেখতে যে সর্বাপেক্ষা দূরবর্তী পাত নোড হল 6 এবং 9 - 288 00:22:03,920 --> 00:22:06,940 পাতার হচ্ছে যারা নোড যে কোন সন্তান আছে. 289 00:22:06,940 --> 00:22:11,760 সুতরাং, অর্ডার থেকে রুট নোড হয় 6 অথবা 9 পেতে, 290 00:22:11,760 --> 00:22:17,840 আমরা এক হপ 7 পেতে করতে হবে এবং তারপর একটি দ্বিতীয় হপ 9 পেতে, 291 00:22:17,840 --> 00:22:21,240 এবং অনুরূপভাবে, কেবল একটি দ্বিতীয় হপ 6 7 থেকে পেতে. 292 00:22:21,240 --> 00:22:29,080 সুতরাং, এই গাছ এখানে বেশী উচ্চতা শুধুমাত্র 2. 293 00:22:29,080 --> 00:22:35,330 আপনি ফিরে যান এবং অন্যান্য গাছের সব জন্য যে পূর্বে আমরা আলোচনা করতে পারেন 294 00:22:35,330 --> 00:22:37,380 7 এবং 6 থেকে শুরু করে, 295 00:22:37,480 --> 00:22:42,500 এবং আপনি যে ঐ গাছ সব উচ্চতা হয় 2 পাবেন. 296 00:22:42,500 --> 00:22:46,320 >> কারণ আমরা যে বিষয়ে কথা বলা হয়েছে করেছি বাইনারি গাছ আদেশ 297 00:22:46,320 --> 00:22:50,250 এবং কেন তারা কুল কারণ হল আপনি তাদের মাধ্যমে অনুসন্ধান করতে পারেন 298 00:22:50,250 --> 00:22:53,810 একটি সাজানো একটি অ্যারের মধ্যে অনুসন্ধানের অনুরূপ উপায়. 299 00:22:53,810 --> 00:22:58,720 এই যেখানে আমরা যে উন্নত লুকআপ সময় পেয়ে সম্পর্কে কথা বলা 300 00:22:58,720 --> 00:23:02,730 উপর সহজ লিঙ্ক তালিকা. 301 00:23:02,730 --> 00:23:05,010 সঙ্গে একটি লিঙ্ক তালিকা - যদি আপনি একটি বিশেষ উপাদান খুঁজে পেতে চান - 302 00:23:05,010 --> 00:23:07,470 আপনি ভাল রৈখিক অনুসন্ধান কিছু বাছাই করা যাচ্ছে না করেন 303 00:23:07,470 --> 00:23:10,920 যেখানে আপনি একটি তালিকা এবং হপ এক দ্বারা এক প্রারম্ভে শুরু - 304 00:23:10,920 --> 00:23:12,620 একটি নোড দ্বারা একটি নোড - 305 00:23:12,620 --> 00:23:16,060 এর মাধ্যমে সম্পূর্ণ তালিকা পর্যন্ত আপনি খুঁজে যাই হোক না কেন আপনি অনুসন্ধান করছেন. 306 00:23:16,060 --> 00:23:19,440 যেহেতু, আপনি যদি একটি বাইনারি গাছ যে এই সুন্দর বিন্যাসে সঞ্চিত আছে, 307 00:23:19,440 --> 00:23:23,300 আপনি আসলে একটি বাইনারি অনুসন্ধান করা হচ্ছে আরও পেতে পারেন 308 00:23:23,300 --> 00:23:25,160 যেখানে আপনি এবং বিভক্ত করা জিতা 309 00:23:25,160 --> 00:23:29,490 এবং প্রতিটি ধাপ এ গাছ যথাযথ অর্ধেক মাধ্যমে অনুসন্ধান. 310 00:23:29,490 --> 00:23:32,840 চলুন কিভাবে যে কাজ দেখতে. 311 00:23:32,840 --> 00:23:38,850 >> যদি আমরা আছে - আবার, আমাদের মূল গাছ ফিরে যাচ্ছে - 312 00:23:38,850 --> 00:23:46,710 আমরা 7 শুরু, আমরা বাম দিকে 3 অধিকার 9,, 313 00:23:46,710 --> 00:23:51,740 এবং 3 অধ আমরা 6 আছে. 314 00:23:51,740 --> 00:24:01,880 আমরা যদি এই গাছ মধ্যে 6 নম্বর জন্য অনুসন্ধান করতে চান, আমরা root-এ শুরু চাই. 315 00:24:01,880 --> 00:24:08,910 আমরা মান আমরা, 6 বলে খুঁজছেন তুলনা হবে, 316 00:24:08,910 --> 00:24:12,320 মান নোড আমরা বর্তমানে যে, এ 7 করছি সঞ্চিত, 317 00:24:12,320 --> 00:24:21,200 যে 6 প্রকৃতপক্ষে কম 7, যাতে আমরা বাম সরাতে চাই. 318 00:24:21,200 --> 00:24:25,530 যদি এর মান 6 7 তার চেয়ে অনেক বেশী ছিল, আমরা পরিবর্তে অধিকার সরানো হবে. 319 00:24:25,530 --> 00:24:29,770 যেহেতু আমরা জানি যে - কারণে আমাদের আদেশ বাইনারি ট্রি কাঠামো - 320 00:24:29,770 --> 00:24:33,910 মান 7 কম সমস্ত 7 বাঁদিকে সঞ্চিত করা যাচ্ছে, 321 00:24:33,910 --> 00:24:40,520 কোন প্রয়োজন এমনকি গাছ ডানদিকে মাধ্যমে খুঁজছেন বিরক্ত আছে. 322 00:24:40,520 --> 00:24:43,780 একবার বাঁদিকে সরানো এবং আমরা আমরা নোড 3 থাকবে এখন করছি, 323 00:24:43,780 --> 00:24:48,110 আমরা যে একই তুলনা আবার না যেখানে আমরা 3 এবং 6 তুলনা করতে পারেন. 324 00:24:48,110 --> 00:24:52,430 এবং আমরা দেখি যে যখন 6 - মান আমরা খুঁজছেন - 3 চেয়ে অনেক বেশী, 325 00:24:52,430 --> 00:24:58,580 আমরা নোড 3 ধারণকারী ডানদিকে যেতে পারেন. 326 00:24:58,580 --> 00:25:02,670 এখানে এখন পর্যন্ত কোন বাম দিকে, তাই আমরা যে উপেক্ষা করা যেতে পারে. 327 00:25:02,670 --> 00:25:06,510 কিন্তু আমরা শুধু জানি যে কারণ আমরা গাছ নিজেই এ খুঁজছেন, 328 00:25:06,510 --> 00:25:08,660 এবং আমরা যে গাছ কোন সন্তান আছে দেখতে পারেন. 329 00:25:08,660 --> 00:25:13,640 >> এটা বেশ সহজ এই গাছ অল্পক্ষণের 6 আপ যদি আমরা নিজেদেরকে মানুষ হিসাবে কাজ করে থাকেন, 330 00:25:13,640 --> 00:25:16,890 কিন্তু এর এই প্রক্রিয়া অনুসরণ যান্ত্রিকভাবে একটি কম্পিউটার ভালো যাক কি 331 00:25:16,890 --> 00:25:18,620 সত্যিই বুঝতে এলগরিদম. 332 00:25:18,620 --> 00:25:26,200 এই মুহুর্তে, আমরা এখন একটি নোডের মধ্যে যে 6 রয়েছে এ করছি, 333 00:25:26,200 --> 00:25:29,180 এবং আমরা মান 6 খুঁজছেন, 334 00:25:29,180 --> 00:25:31,740 তাই প্রকৃতপক্ষে, আমরা যথাযথ নোড পাওয়া করেছি. 335 00:25:31,740 --> 00:25:35,070 আমরা আমাদের গাছ মান 6 পাওয়া গেছে, এবং আমরা আমাদের অনুসন্ধান করতে পারবে. 336 00:25:35,070 --> 00:25:37,330 এই সময়ে, কি করছেন তার উপর নির্ভর করে, 337 00:25:37,330 --> 00:25:41,870 আমরা বলতে পারেন, হ্যাঁ, আমরা মান 6 পাওয়া গিয়েছে, এটা আমাদের গাছ বিদ্যমান. 338 00:25:41,870 --> 00:25:47,640 অথবা, যদি আমরা একটি নোড বা সন্নিবেশ করার কিছু পরিকল্পনা করছি, আমরা এই সময়ে তা করতে পারে. 339 00:25:47,640 --> 00:25:53,010 >> চলুন শুরু করা যাক একটি দম্পতি আরো অনুসন্ধান শুধু কিভাবে এই কাজ করে দেখতে না. 340 00:25:53,010 --> 00:25:59,390 চলুন কি যদি আমরা চেষ্টা মান 10 এবং সন্ধান করার ছিল তাকান. 341 00:25:59,390 --> 00:26:02,970 যদি আমরা মূল্য 10 সন্ধান করার ছিল, আমরা root-এ শুরু হয়নি. 342 00:26:02,970 --> 00:26:07,070 আমরা যে 10 7 তার চেয়ে অনেক বেশী, তাই আমরা দেখতে ডান দিকে সরাতে চাই চাই. 343 00:26:07,070 --> 00:26:13,640 আমরা 9 ​​এবং 10 থেকে 9 তুলনা পেতে এবং যে 9 প্রকৃতপক্ষে কম 10 দেখতে চাই. 344 00:26:13,640 --> 00:26:16,210 তাই আবার, আমরা অধিকার নিয়ে যেতে চেষ্টা চাই. 345 00:26:16,210 --> 00:26:20,350 কিন্তু এই সময়ে, আমরা যে আমরা একটি নাল নোড করেন বিজ্ঞপ্তি চাই. 346 00:26:20,350 --> 00:26:23,080 সেখানে কিছুই নেই. যেখানে কিছুই করা উচিত 10 পর্যন্ত. 347 00:26:23,080 --> 00:26:29,360 এই যেখানে আমরা ব্যর্থতা রিপোর্ট করতে পারেন - যা প্রকৃতপক্ষে সেখানে কোন গাছ 10. 348 00:26:29,360 --> 00:26:35,420 এবং পরিশেষে, যাক এর ক্ষেত্রে যেখানে আমরা গাছ অল্পক্ষণের 1 আপ করার চেষ্টা মধ্য দিয়ে যেতে হবে. 349 00:26:35,420 --> 00:26:38,790 এটি অনুরূপ কি বদলে যাচ্ছে ডান ছাড়া যদি আমরা চেহারা 10 আপ, যাও, 350 00:26:38,790 --> 00:26:41,260 আমরা বাম যেতে চলুন. 351 00:26:41,260 --> 00:26:46,170 আমরা 7 থেকে আরম্ভ হয় এবং যে 1 7 তুলনায় কম, তাই আমরা বাঁদিকে সরানো. 352 00:26:46,170 --> 00:26:51,750 আমরা 3 পেতে এবং যে 1 3 তুলনায় কম, তাই আবার আমরা বাম সরাতে চেষ্টা করুন. 353 00:26:51,750 --> 00:26:59,080 এই পর্যায়ে আমরা একটি নাল নোড আছে, তাই আবার আমরা ব্যর্থতা রিপোর্ট করতে পারেন. 354 00:26:59,080 --> 00:27:10,260 >> যদি আপনি বাইনারি গাছ সম্পর্কে আরো জানতে চান, 355 00:27:10,260 --> 00:27:14,420 একটি মজার সামান্য সমস্যা যে আপনি তাদের সাথে করতে পারেন আভা আছে. 356 00:27:14,420 --> 00:27:19,450 আমি আঁকার চর্চা এইসব চিত্র এক দ্বারা এক আউট করার পরামর্শ 357 00:27:19,450 --> 00:27:21,910 বিভিন্ন ধাপের মাধ্যমে এবং সমস্ত নিম্নলিখিত, 358 00:27:21,910 --> 00:27:25,060 কারণ এই অতি - উপকারে আসা হবে 359 00:27:25,060 --> 00:27:27,480 না আপনি যখন Huffman এনকোডিং সমস্যা সেট করছেন 360 00:27:27,480 --> 00:27:29,390 কিন্তু ভবিষ্যতে কোর্স - 361 00:27:29,390 --> 00:27:32,220 শুধু শেখার কিভাবে ডাটা স্ট্রাকচার আঁকতে আউট এবং সমস্যা মাধ্যমে মনে 362 00:27:32,220 --> 00:27:38,000 সঙ্গে কলম এবং কাগজ বা, এই ক্ষেত্রে, রহমান এবং লেখনী. 363 00:27:38,000 --> 00:27:41,000 >> যদিও এই মুহুর্তে, আমরা উপর কিছু কোডিং অনুশীলনের না সরানো চলুন 364 00:27:41,000 --> 00:27:44,870 এবং প্রকৃতপক্ষে এই বাইনারি গাছ এবং সাথে খেলা দেখতে. 365 00:27:44,870 --> 00:27:52,150 আমি ফিরে যাও আমার কম্পিউটারের মাধ্যমে সুইচ যাচ্ছি. 366 00:27:52,150 --> 00:27:58,480 জন্য পরিবর্তে CS50 রান বা CS50 শূন্যস্থানের ব্যবহার অধ্যায়, এই অংশ, 367 00:27:58,480 --> 00:28:01,500 আমি যন্ত্র ব্যবহার করতে যাচ্ছি. 368 00:28:01,500 --> 00:28:04,950 >> সমস্যা সেট স্পেসিফিকেশন সঙ্গে নিম্নলিখিত বরাবর, 369 00:28:04,950 --> 00:28:07,740 আমি দেখতে যে আমি যন্ত্র খুলুন অনুমিত করছি, 370 00:28:07,740 --> 00:28:11,020 আমার ড্রপবক্স ফোল্ডারে যান, নামক একটি ফোল্ডার তৈরি অনুচ্ছেদ 7, 371 00:28:11,020 --> 00:28:15,730 এবং তারপর নামক কোনো ফাইল binary_tree.c তৈরি. 372 00:28:15,730 --> 00:28:22,050 আমরা শুরু করছি. আমি আনুষঙ্গিক ইতিমধ্যেই খোলা পেয়েছেন. 373 00:28:22,050 --> 00:28:25,910 আমি একটি টার্মিনাল মুঠি ধরে টেনে তুলবো যাচ্ছি. 374 00:28:25,910 --> 00:28:38,250 আমি ড্রপবক্স ফোল্ডারে যেতে যাচ্ছি, একটি ডিরেক্টরিতে নামক section7 করা, 375 00:28:38,250 --> 00:28:42,230 দেখুন এবং এটা সম্পূর্ণই খালি. 376 00:28:42,230 --> 00:28:48,860 এখন আমি binary_tree.c খুলুন যাচ্ছি. 377 00:28:48,860 --> 00:28:51,750 ঠিক আছে. খালি ফাইল - আমরা শুরু করছি. 378 00:28:51,750 --> 00:28:54,330 >> যাক এর স্পেসিফিকেশন ফিরে যান. 379 00:28:54,330 --> 00:28:59,850 বৈশিষ্টে একটি নতুন সংজ্ঞা তৈরি জিজ্ঞেস টাইপ 380 00:28:59,850 --> 00:29:03,080 একটি নোডের জন্য বাইনারি গাছ int মান ধারণকারী - 381 00:29:03,080 --> 00:29:07,110 ঠিক মত মান যে আমরা আগে আমাদের diagramming মধ্যে সৃষ্টি আউট. 382 00:29:07,110 --> 00:29:11,740 আমরা এই boilerplate typedef যে মুহূর্তে আমরা এখানে ব্যবহার করেছেন চলুন 383 00:29:11,740 --> 00:29:14,420 আপনি যে সমস্যা সেট 5 থেকে সনাক্ত করা উচিত - 384 00:29:14,420 --> 00:29:19,190 যদি আপনি হ্যাশ অতিক্রমকারী speller প্রোগ্রামের টেবিল উপায় কি. 385 00:29:19,190 --> 00:29:22,540 আপনি গত সপ্তাহে এর অধ্যায় থেকে তা সনাক্ত করা উচিত 386 00:29:22,540 --> 00:29:23,890 যেখানে আমরা লিঙ্ক তালিকা সম্পর্কে বললাম. 387 00:29:23,890 --> 00:29:27,870 আমরা একটি struct নোডের এই typedef পেয়েছেন, 388 00:29:27,870 --> 00:29:34,430 এবং আমরা struct নোডের এই পূর্বেই এই নাম দেওয়া struct নোড করেছি 389 00:29:34,430 --> 00:29:39,350 যাতে পরে আমরা তা থেকে আমরা struct নোড পয়েন্টার আছে চাইবেন পাঠাতে পারেন 390 00:29:39,350 --> 00:29:45,740 হিসাবে আমাদের struct অংশ, কিন্তু আমরা কি তাহলে এই আবৃত করেছি - 391 00:29:45,740 --> 00:29:47,700 অথবা এর পরিবর্তে, ঘিরা এই - একটি typedef মধ্যে 392 00:29:47,700 --> 00:29:54,600 যাতে, পরে কোড, আমরা এই struct যাও পরিবর্তে শুধুমাত্র একটি struct নোডের একটি নোড হিসাবে পাঠাতে পারেন. 393 00:29:54,600 --> 00:30:03,120 >> এই একাকী সংযুক্ত তালিকা সংজ্ঞা অনুরূপ যে আমরা দেখেছি গত সপ্তাহে হবে. 394 00:30:03,120 --> 00:30:20,070 এই কাজের জন্য, আমি শুধু লেখা boilerplate আউট দ্বারা আরম্ভ. 395 00:30:20,070 --> 00:30:23,840 আমরা জানি যে আমরা একটি পূর্ণসংখ্যা মান আছে, 396 00:30:23,840 --> 00:30:32,170 তাই আমরা int মান, এবং তারপর করা পরিবর্তে পরবর্তী উপাদান শুধু একটি হচ্ছে পয়েন্টার পাবেন - 397 00:30:32,170 --> 00:30:33,970 হিসাবে আমরা এককভাবে সংযুক্ত তালিকার সঙ্গে কি - 398 00:30:33,970 --> 00:30:38,110 আমরা বাম এবং ডান সন্তানের পয়েন্টার আছে চলুন. 399 00:30:38,110 --> 00:30:42,880 খুব সুন্দর সহজ - struct নোড * বাম সন্তান; 400 00:30:42,880 --> 00:30:51,190 এবং struct নোড * শিশু অধিকার;. কুল. 401 00:30:51,190 --> 00:30:54,740 যে একটি প্রশংসনীয় ভাল শুরু মত দেখাচ্ছে. 402 00:30:54,740 --> 00:30:58,530 যাক এর স্পেসিফিকেশন ফিরে যান. 403 00:30:58,530 --> 00:31:05,030 >> এখন আমরা একটি গাছ মূল নোডের জন্য একটি বিশ্বব্যাপী * পরিবর্তনশীল ঘোষণা করা প্রয়োজন. 404 00:31:05,030 --> 00:31:10,590 আমরা এই গ্লোবাল ঠিক মত আমরা আমাদের লিঙ্ক তালিকা এছাড়াও বিশ্বের প্রথম পয়েন্টার তৈরি করতে যাচ্ছেন. 405 00:31:10,590 --> 00:31:12,690 এই ছিল যাতে কাজ করে যে আমরা লিখুন 406 00:31:12,690 --> 00:31:16,180 আমরা এই রুট কাছাকাছি রাখতে পার না - 407 00:31:16,180 --> 00:31:19,620 যদিও আমরা যে আপনি যদি না যাও recursively এই ফাংশন লিখতে চান দেখতে পাবেন, 408 00:31:19,620 --> 00:31:22,830 এটি প্রথমে ভালো ভালো পাস না একটি বিশ্বব্যাপী হিসাবে কাছাকাছি হতে পারে 409 00:31:22,830 --> 00:31:28,090 এবং পরিবর্তে এটি আরম্ভ স্থানীয়ভাবে আপনার প্রধান কাজ. 410 00:31:28,090 --> 00:31:31,960 কিন্তু, আমরা এটি বিশ্বজুড়ে করতে শুরু করব. 411 00:31:31,960 --> 00:31:39,920 আবার, আমরা শূণ্যস্থান কয়েক দিন, এবং আমি একটি নোড * রুট ডিক্লেয়ার চলেছি করব. 412 00:31:39,920 --> 00:31:46,770 শুধু আমি নিশ্চিত যে এই uninitialized না ছেড়ে চলে যাও না, আমি নাল এটা সমান সেট যাচ্ছি. 413 00:31:46,770 --> 00:31:52,210 মূল কাজ এখন, - যা আমরা সত্যিই দ্রুত ডান এখানে লিখতে হবে - 414 00:31:52,210 --> 00:32:00,450 int প্রধান (int-argc, গৃহস্থালির কাজ const * argv []) - 415 00:32:00,450 --> 00:32:10,640 এবং আমি const হিসাবে আমার argv অ্যারের ঘোষণা শুরু যাচ্ছে ঠিক তাই যে আমি জানি না 416 00:32:10,640 --> 00:32:14,550 যে যারা যুক্তি হয় আর্গুমেন্ট যে আমি সম্ভবত পরিবর্তন করতে না চান. 417 00:32:14,550 --> 00:32:18,390 যদি আমি তাদের পরিবর্তন করতে চান সম্ভবত আমি করা উচিত তাদের কপি তৈরি. 418 00:32:18,390 --> 00:32:21,740 আপনি এই কোড অনেক দেখতে পাবেন. 419 00:32:21,740 --> 00:32:25,440 এটা সূক্ষ্ম উপায় হয়. এটা হিসাবে এটি ছেড়ে সূক্ষ্ম - const যদি চান বর্জন করা. 420 00:32:25,440 --> 00:32:28,630 আমি সাধারণত এটি স্থাপন করা ঠিক তাই যে আমি নিজেকে স্মরণ করিয়ে দেওয়া 421 00:32:28,630 --> 00:32:33,650  যে আমি সম্ভবত ঐ আর্গুমেন্ট সংশোধন করতে না চান. 422 00:32:33,650 --> 00:32:39,240 >> সর্বদা হিসাবে, আমি এই প্রধান শেষে ফিরে 0 লাইন অন্তর্ভুক্ত যাচ্ছি. 423 00:32:39,240 --> 00:32:45,730 এখানে, আমি আমার রুট নোড আরম্ভ করা হবে. 424 00:32:45,730 --> 00:32:48,900 যেমন আছে তেমনি অধিকার এখন, আমি একটি নাল পয়েন্টার যে সেট এর পেয়েছেন, 425 00:32:48,900 --> 00:32:52,970 তাই এটা কিছুই নির্দেশ করে না. 426 00:32:52,970 --> 00:32:57,480 যাতে আসলে নোড নির্মাণের শুরু, 427 00:32:57,480 --> 00:32:59,250 আমি সর্বপ্রথম এটি জন্য মেমরি বরাদ্দ করা প্রয়োজন. 428 00:32:59,250 --> 00:33:05,910 আমি গাদা malloc মেমরি ব্যবহার করে তা করতে যাচ্ছি. 429 00:33:05,910 --> 00:33:10,660 আমি root-র সমান malloc ফলে সেট চলেছি, 430 00:33:10,660 --> 00:33:19,550 এবং আমি sizeof অপারেটর একটি নোড মাপ নিরূপণ ব্যবহার করতে যাচ্ছি. 431 00:33:19,550 --> 00:33:24,990 যে কারণে আমি sizeof নোড হিসাবে ব্যবহার করার জন্য বিরোধিতা বলে, 432 00:33:24,990 --> 00:33:37,020 malloc (4 + 4 +4) বা malloc 12 - ভালো কিছু করছেন - 433 00:33:37,020 --> 00:33:40,820 এর কারণ হল আমি আমার কোড যতটা সম্ভব সামঞ্জস্যপূর্ণ হতে চান. 434 00:33:40,820 --> 00:33:44,540 আমি এই. গ ফাইলটি যোগ করতে চান, যন্ত্রপাতি এটা কম্পাইল, 435 00:33:44,540 --> 00:33:48,820 এবং তারপর আমার 64 বিট ম্যাক এটা কম্পাইল - 436 00:33:48,820 --> 00:33:52,040 অথবা একটি সম্পূর্ণ ভিন্ন আর্কিটেকচার - 437 00:33:52,040 --> 00:33:54,640 এবং আমি এই একই কাজ করতে চান. 438 00:33:54,640 --> 00:33:59,510 >> যদি আমি ভেরিয়েবল মাপ সম্পর্কে অনুমানের তৈরীর করছি - 439 00:33:59,510 --> 00:34:02,070 কোন int অথবা একটি পয়েন্টার মাপ মাপ - 440 00:34:02,070 --> 00:34:06,070 তারপর আমি আর্কিটেকচারের ধরণের সম্পর্কে করছি ধারনাগুলো তৈরীর 441 00:34:06,070 --> 00:34:10,440 যা সাফল্যের সঙ্গে আমার কোড কম্পাইল করার সময় রান করতে পারেন. 442 00:34:10,440 --> 00:34:15,030 সর্বদা sizeof ম্যানুয়ালি struct ক্ষেত্র summing বিপরীতে ব্যবহার. 443 00:34:15,030 --> 00:34:20,500 অন্যান্য কারণ যে প্যাডিং যে কম্পাইলার struct মধ্যে রাখে হতে পারে সেখানে. 444 00:34:20,500 --> 00:34:26,570 কেবল ব্যক্তিগত ক্ষেত্র summing যে আপনি সাধারণত কিছু করে যেতে চাই না, 445 00:34:26,570 --> 00:34:30,340 তাই, যে লাইন মুছে দিন. 446 00:34:30,340 --> 00:34:33,090 এখন সত্যিই, এই রুট নোড সূচনা, 447 00:34:33,090 --> 00:34:36,489 আমি তার বিভিন্ন ক্ষেত্র ও মান চলা যাও আছে যাচ্ছি. 448 00:34:36,489 --> 00:34:41,400 উদাহরণস্বরূপ, আমি জানি আমি মান 7 আরম্ভ করতে চান, 449 00:34:41,400 --> 00:34:46,920 এবং এখন জন্য আমি বাম সন্তানের নাল সেট করা যাচ্ছে না 450 00:34:46,920 --> 00:34:55,820 এবং সঠিক সন্তানের নাল হবে. গ্রেট! 451 00:34:55,820 --> 00:35:02,670 আমরা বৈশিষ্ট যে অংশ করেছেন. 452 00:35:02,670 --> 00:35:07,390 >> পাতা 3 নীচে স্পেসিফিকেশন নিচে তিনটি আরো নোড নির্মাণ আমাকে জিজ্ঞেস করল - 453 00:35:07,390 --> 00:35:10,600 9 এক সাথে 3, এক 6 ধারণকারী, এবং এক ধারণকারী - 454 00:35:10,600 --> 00:35:14,210 এবং তারপর তাকে উপরে তারের তাই এটা ঠিক আমাদের মত গাছ চিত্রটি দেখায় 455 00:35:14,210 --> 00:35:17,120 আমরা যে বিষয়ে কথা বলছি, পূর্বে ছিল. 456 00:35:17,120 --> 00:35:20,450 চলুন শুরু করা যাক না এখানে যে চমত্কার দ্রুত. 457 00:35:20,450 --> 00:35:26,270 আপনি সত্যিই দ্রুত যে আমি প্রতিলিপি কোড একটি গুচ্ছ লেখা শুরু যাচ্ছি দেখতে পাবেন. 458 00:35:26,270 --> 00:35:32,100 আমি একটি নোড * তৈরি করতে চাই এবং এটা আমার তিন কল চালু করছি না. 459 00:35:32,100 --> 00:35:36,000 আমি এটা malloc (sizeof (নোড)) সমান সেট যাচ্ছি. 460 00:35:36,000 --> 00:35:41,070 আমি তিনটি সেট = 3> মান যাচ্ছি. 461 00:35:41,070 --> 00:35:54,780 তিন -> left_child = শূন্য; তিনটি -> ডান _child = শূন্য; হিসাবে ভাল. 462 00:35:54,780 --> 00:36:01,150 যে দেখায় রুট আরম্ভ যাও প্রশংসনীয় অনুরূপ, এবং যে ঠিক কি 463 00:36:01,150 --> 00:36:05,760 আমি যদি আমি শুরু 6 এবং 9 আরম্ভ হিসাবে ভাল আছে যাচ্ছি. 464 00:36:05,760 --> 00:36:20,720 আমি যে কি সত্যিই দ্রুত পাবেন - প্রকৃতপক্ষে, আমি একটা সামান্য কপি এবং পেস্ট করতে চলেছি, 465 00:36:20,720 --> 00:36:46,140 ঠিক আছে - এবং আমি নিশ্চিত যে করা. 466 00:36:46,470 --> 00:37:09,900  এখন, আমি করেছি এবং এটি কপি করা হবে আমি এগিয়ে যাব 6 এই সমান সেট করতে পারেন. 467 00:37:09,900 --> 00:37:14,670 আপনি যে এই কিছুক্ষণ সময় লাগে এবং অতি - কার্যকরী নয় দেখতে পারেন. 468 00:37:14,670 --> 00:37:22,610 অল্পমাত্র বিট, আমরা একটি ফাংশন যা আমাদের জন্য এই করবেন লিখুন করব. 469 00:37:22,610 --> 00:37:32,890 আমি একটি 9 সঙ্গে এই প্রতিস্থাপন করতে চান, একটি 6 সঙ্গে যে প্রতিস্থাপন করুন. 470 00:37:32,890 --> 00:37:37,360 >> এখন আমরা আমাদের সমস্ত নোড সারাংশ তৈরি এবং সক্রিয়া পেয়েছেন. 471 00:37:37,360 --> 00:37:41,200 আমরা আমাদের রুট সেট সমান 7 যাও না, বা করেছি মান ধারণকারী 7, 472 00:37:41,200 --> 00:37:46,510 আমাদের নোড 3 ধারণকারী, আমাদের নোড 6 ধারণকারী, এবং আমাদের নোড 9 ধারণকারী. 473 00:37:46,510 --> 00:37:50,390 এই মুহুর্তে, আমরা সব করতে হবে তা হচ্ছে তারের আপ সবকিছু. 474 00:37:50,390 --> 00:37:53,020 কারণ আমি সব NULL পয়েন্টার সক্রিয়া করা হয় ঠিক যে আমি নিশ্চিত হয়ে নেবেন যে 475 00:37:53,020 --> 00:37:56,260 আমি ভুলবসত কোনো আছে uninitialized পয়েন্টার নেই. 476 00:37:56,260 --> 00:38:02,290 এবং এই সময়ে এছাড়াও থেকে,, আমি আসলে শুধুমাত্র প্রতিটি অন্যান্য নোডের সাথে সংযোগ আছে - 477 00:38:02,290 --> 00:38:04,750 বেশী যে তারা আসলে এর সাথে সংযুক্ত যাও - আমি মধ্যে দিয়ে গমন করা এবং না 478 00:38:04,750 --> 00:38:08,240 নিশ্চিত করুন যে, সেখানে সব nulls উপযুক্ত জায়গা আছে. 479 00:38:08,240 --> 00:38:15,630 >> Root-এ শুরু করে, আমি জানি যে, root এর বাম সন্তানের 3. 480 00:38:15,630 --> 00:38:21,250 আমি জানি যে, root-র অধিকার সন্তানের 9. 481 00:38:21,250 --> 00:38:24,880 পরে যে, শুধুমাত্র অন্যান্য সন্তানের যে আমি চিন্তা বাকি আছে 482 00:38:24,880 --> 00:38:39,080 3 এর ডান সন্তান, যা 6. 483 00:38:39,080 --> 00:38:44,670 এই মুহুর্তে, সব মনে প্রশংসনীয় ভাল. 484 00:38:44,670 --> 00:38:54,210 আমরা এই লাইনের কিছু মুছে ফেলব. 485 00:38:54,210 --> 00:38:59,540 এখন সবকিছু পরিষ্কার - পরিচ্ছন্ন দেখায় ভালো. 486 00:38:59,540 --> 00:39:04,240 চলুন ফিরে যান এবং আমাদের স্পেসিফিকেশন কি আমরা পরের কি আছে দেখতে. 487 00:39:04,240 --> 00:39:07,610 >> এই মুহুর্তে, আমরা একটি ফাংশন বলা হয় 'রয়েছে' লিখুন আছে 488 00:39:07,610 --> 00:39:14,150 সঙ্গে 'bool রয়েছে (int মান)' র একটি প্রোটোটাইপ. 489 00:39:14,150 --> 00:39:17,060 এবং এই ফাংশন রয়েছে সত্য ফিরে যাচ্ছে 490 00:39:17,060 --> 00:39:21,200  যদি যাও আমাদের গাছ বিশ্বব্যাপী root-র দ্বারা পরিবর্তনশীল তীক্ষ্ন 491 00:39:21,200 --> 00:39:26,950  মান ফাংশন এবং মিথ্যা অন্যথায় মধ্যে পাস রয়েছে. 492 00:39:26,950 --> 00:39:29,000 চলুন এগিয়ে যান এবং যে না. 493 00:39:29,000 --> 00:39:35,380 এই যে আমরা ঠিক লুকআপ রহমান অল্পমাত্র বিট আগে হস্তগত দ্বারা কি মত হতে যাচ্ছে. 494 00:39:35,380 --> 00:39:40,130 ধরা যাক এর পিছনে অল্প জুম এবং উপরে স্ক্রোল করুন. 495 00:39:40,130 --> 00:39:43,130 আমরা আমাদের অধিকার প্রধান ফাংশন উপরের এই ফাংশন করা চলুন 496 00:39:43,130 --> 00:39:48,990 যাতে যাও প্রোটোটাইপিং কোনো সাজানোর আমরা না. 497 00:39:48,990 --> 00:39:55,960 সুতরাং, bool রয়েছে (int মান). 498 00:39:55,960 --> 00:40:00,330 এখন পর্যন্ত আমরা যেতে. আমাদের boilerplate ঘোষণা আছে. 499 00:40:00,330 --> 00:40:02,900 শুধু কি নিশ্চিত যে এই কম্পাইল করতে হবে, 500 00:40:02,900 --> 00:40:06,820 আমি এগিয়ে যান এবং এটা সমান মিথ্যা সেট ফিরে যাচ্ছি. 501 00:40:06,820 --> 00:40:09,980 রাইট এখন শুধু এই ফাংশন এবং কিছু না সবসময় যে রিপোর্ট করতে হবে 502 00:40:09,980 --> 00:40:14,010 মান যে আমরা খুঁজছেন গাছ হয় না. 503 00:40:14,010 --> 00:40:16,280 >> এই মুহূর্তে, এটি সম্ভবত একটি ভালো - 504 00:40:16,280 --> 00:40:19,600 যেহেতু আমরা একটি কোড আভা লিখিত করেছি এবং আমরা এখনো পরীক্ষার এমনকি চেষ্টা করেন নি - 505 00:40:19,600 --> 00:40:22,590 নিশ্চিত করুন যে সব এটি প্রনয়ন করা. 506 00:40:22,590 --> 00:40:27,460 যে আমরা কি নিশ্চিত যে আসলে এই কম্পাইল করতে হবে একটি দম্পতি আছে. 507 00:40:27,460 --> 00:40:33,530 প্রথমত, আমরা আসছি কোন লাইব্রেরীর কোন ফাংশন যে এখনো আমরা অন্তর্ভুক্ত না করে ব্যবহার করে দেখুন. 508 00:40:33,530 --> 00:40:37,940 ফাংশন আমরা এতদূর ব্যবহার করেছি malloc হয়, 509 00:40:37,940 --> 00:40:43,310 এবং তারপর আমরা করেছি এই ধরনের ব্যবহার করা হয়েছে - এই ননস্ট্যান্ডার্ড টাইপ বলা 'bool' - 510 00:40:43,310 --> 00:40:45,750 যা প্রমিত bool হেডার ফাইলের মধ্যে অন্তর্ভুক্ত করা হয়. 511 00:40:45,750 --> 00:40:53,250 আমরা নিশ্চিতভাবে bool টাইপ জন্য bool.h মান অন্তর্ভুক্ত করতে চাইলে, 512 00:40:53,250 --> 00:40:59,230 এবং আমরা এটাও # মান লাইব্রেরি জন্য মান অন্তর্ভুক্ত করতে চাইতে lib.h 513 00:40:59,230 --> 00:41:03,530 যে malloc, এবং বিনামূল্যে, এবং যে সমস্ত অন্তর্ভুক্ত. 514 00:41:03,530 --> 00:41:08,660 তাই, জুম আউট, আমরা ছেড়ে যাচ্ছেন. 515 00:41:08,660 --> 00:41:14,190 চলুন এবং চেষ্টা করে নিশ্চিত করুন যে আসলে এই কম্পাইল করা হয়নি. 516 00:41:14,190 --> 00:41:18,150 আমরা দেখতে যে এটা আছে, যাতে আমরা ডান ট্র্যাক করছি. 517 00:41:18,150 --> 00:41:22,990 >> চলুন binary_tree.c খুলুন আবার. 518 00:41:22,990 --> 00:41:34,530 এটা প্রনয়ন. চলুন নামা এবং নিশ্চিত করুন যে আমরা আমাদের রয়েছে কিছু ফাংশন কল সন্নিবেশ করা - 519 00:41:34,530 --> 00:41:40,130 ঠিক নিশ্চিত যে যে সকল ভাল এবং ভাল হয়েছে. 520 00:41:40,130 --> 00:41:43,170 উদাহরণস্বরূপ, যখন আমরা আমাদের গাছ কিছু অনুসন্ধান করেছিলাম আগে, 521 00:41:43,170 --> 00:41:48,500 আমরা মান 6, 10, 1 এবং সন্ধান করার চেষ্টা করেছি, এবং আমরা জানতো যে 6 গাছ ছিল, 522 00:41:48,500 --> 00:41:52,220 10 গাছ ছিল এবং 1 হয় গাছ ছিল না, না. 523 00:41:52,220 --> 00:41:57,230 চলুন যাও জিনিসটা যারা একটি উপায় হিসাবে নমুনা কল ব্যবহার করুন বা না করুন 524 00:41:57,230 --> 00:41:59,880 আমাদের রয়েছে ফাংশন কাজ করছে. 525 00:41:59,880 --> 00:42:05,210 যাতে না, আমি printf ফাংশান ব্যবহার করতে যাচ্ছি, 526 00:42:05,210 --> 00:42:10,280 এবং আমরা কল যাও রয়েছে ফলাফল প্রিন্ট আউট চলুন. 527 00:42:10,280 --> 00:42:13,280 আমি একটি স্ট্রিং স্থাপন করা যাচ্ছে না "উপস্থিত রয়েছে (% d) = কারণ 528 00:42:13,280 --> 00:42:20,470  আমরা প্ল্যাগ মান যাচ্ছে যে আমরা এর জন্য সন্ধান করতে বলছে করছি, 529 00:42:20,470 --> 00:42:27,130 এবং =% s \ n "এবং যে ব্যবহার হিসাবে আমাদের ফরম্যাট স্ট্রিং. 530 00:42:27,130 --> 00:42:30,720 আক্ষরিক পর্দায় প্রিন্ট আউট - আমরা শুধুমাত্র আপনার দেখতে যাচ্ছে - 531 00:42:30,720 --> 00:42:32,060 চেহারা কি একটি ফাংশন কল ভালো. 532 00:42:32,060 --> 00:42:33,580 এটি আসলে ফাংশন কল না. 533 00:42:33,580 --> 00:42:36,760  এই মাত্র একটি স্ট্রিং একটি ফাংশন কল মত ডিজাইন. 534 00:42:36,760 --> 00:42:41,140 >> এখন, আমরা মান চলা যাও চলুন. 535 00:42:41,140 --> 00:42:43,580 আমরা 6 রয়েছে চেষ্টা চলুন, 536 00:42:43,580 --> 00:42:48,340 এবং তারপর কি আমরা এখানে করতে যাচ্ছেন যে তিন অপারেটর ব্যবহার হয়. 537 00:42:48,340 --> 00:42:56,340 চলুন শুরু করা যাক দেখুন - 6 রয়েছে - তাই এখন, আমি 6 অন্তর্গত করেছি এবং যদি 6 রয়েছে সত্য, 538 00:42:56,340 --> 00:43:01,850 স্ট্রিং যে আমরা% s-বিন্যাসে অক্ষর পাঠাতে চলুন 539 00:43:01,850 --> 00:43:04,850 যাও পংক্তি "সত্য" হবে. 540 00:43:04,850 --> 00:43:07,690 চলুন শুরু করা যাক একটু বিট উপর নীচে স্ক্রোল করুন. 541 00:43:07,690 --> 00:43:16,210 অন্যথায়, আমরা স্ট্রিং "মিথ্যা" পাঠাতে যদি 6 আয় মিথ্যা রয়েছে চান. 542 00:43:16,210 --> 00:43:19,730 এটি একটি সামান্য নির্বোধ সুদর্শন, কিন্তু আমি জিনিসটা আমি ভাল হিসাবে চিত্রিত করা হতে পারে 543 00:43:19,730 --> 00:43:23,780 যেহেতু আমরা এটা দেখা অল্প সময়ের জন্য নয় কি তিন অপারেটর দেখায়. 544 00:43:23,780 --> 00:43:27,670 এটি একটি সুন্দর, সহজ উপায় চিন্তা যদি আমাদের রয়েছে ফাংশন কাজ হবে. 545 00:43:27,670 --> 00:43:30,040 আমি ফিরে যাও উপর বাম স্ক্রল চলেছি, 546 00:43:30,040 --> 00:43:39,900 এবং আমি কপি এবং কয়েক বার এই লাইন আটকান যাচ্ছি. 547 00:43:39,900 --> 00:43:44,910 এটা এই মান কাছাকাছি কিছু পরিবর্তন, 548 00:43:44,910 --> 00:43:59,380 তাই এই যাও 1 হবে, এবং এই থেকে 10 হবে. 549 00:43:59,380 --> 00:44:02,480 >> এই পর্যায়ে আমরা একটি সুন্দর রয়েছে ফাংশন পেয়েছেন. 550 00:44:02,480 --> 00:44:06,080 আমরা কিছু পরীক্ষা আছে, এবং আমরা যদি এই সমস্ত কাজ দেখতে পাবেন. 551 00:44:06,080 --> 00:44:08,120 এই মুহুর্তে আমরা আরো কিছু কোড লিখিত করেছি. 552 00:44:08,120 --> 00:44:13,160 টাইম আউট করে প্রস্থান করার জন্য এবং নিশ্চিত করুন যে এখনও সবকিছু প্রনয়ন করা. 553 00:44:13,160 --> 00:44:20,360 আউট থেকে প্রস্থান করুন, এবং এখন এর বাইনারি ট্রি পুনরায় তৈরীর চেষ্টা যাক. 554 00:44:20,360 --> 00:44:22,260 ওয়েল, এটা মনে হয় আমরা একটি ত্রুটি পেয়েছেন, 555 00:44:22,260 --> 00:44:26,930 এবং আমরা করেছি বেশী স্পষ্টভাবে এই লাইব্রেরি ফাংশন প্রকাশক printf. 556 00:44:26,930 --> 00:44:39,350 দেখে মনে হচ্ছে আমরা এবং যেতে # standardio.h অন্তর্ভুক্ত করা প্রয়োজন. 557 00:44:39,350 --> 00:44:45,350 এবং সেই সাথে, সবকিছু সঙ্কলন করা উচিত. আমরা সব ভাল. 558 00:44:45,350 --> 00:44:50,420 এখন আসুন গাছ বাইনারি চালানোর চেষ্টা করুন এবং দেখুন সেখানে কি ঘটছে. 559 00:44:50,420 --> 00:44:53,520 এখানে আমরা,. / Binary_tree, 560 00:44:53,520 --> 00:44:55,190 এবং আমরা দেখতে যে, হিসাবে আমরা প্রত্যাশিত - 561 00:44:55,190 --> 00:44:56,910 কারণ আমরা বাস্তবায়িত হয়নি এখনও রয়েছে, 562 00:44:56,910 --> 00:44:59,800 অথবা এর পরিবর্তে, আমরা ফিরে মিথ্যা মধ্যে রেখেছি - 563 00:44:59,800 --> 00:45:03,300 আমরা দেখতে যে এটা তাদের জন্য এর ফিরে মিথ্যা, 564 00:45:03,300 --> 00:45:06,180 যাতে অধিকাংশ অংশ জন্য সমস্ত এর কাজ মোটামুটি ভাল. 565 00:45:06,180 --> 00:45:11,860 >> চলুন ফিরে যান এবং বাস্তবায়ন আসলে এই পর্যায়ে রয়েছে. 566 00:45:11,860 --> 00:45:17,490 আমি নিচে স্ক্রল, জুম ইন যাচ্ছে, এবং করছি - 567 00:45:17,490 --> 00:45:22,330 মনে রাখবেন, আমরা যে অ্যালগরিদম ব্যবহার ছিল যে আমরা রুট নোড শুরু 568 00:45:22,330 --> 00:45:28,010 প্রতিটি নোডের মধ্যে যে আমরা সম্মুখীন হন এবং তারপর, আমরা একটি তুলনা না, 569 00:45:28,010 --> 00:45:32,380 এবং উপর ভিত্তি করে আমরা যে তুলনা হয় সন্তানের বাম বা ডান সন্তানের সরাতে. 570 00:45:32,380 --> 00:45:39,670 এই বাইনারি অনুসন্ধান কোড লিখেছে যে আমরা আগে শব্দটি খুব অনুরূপ চেহারা হবে. 571 00:45:39,670 --> 00:45:47,810 যখন আমরা শুরু করল, আমরা জানি যে আমরা বর্তমান নোডের উপর রাখা চাই 572 00:45:47,810 --> 00:45:54,050 আমরা যে এ, খুঁজছি এবং বর্তমান নোড যাও রুট নোড যাও সক্রিয়া করা যাচ্ছে করছি. 573 00:45:54,050 --> 00:45:56,260 এবং এখন, আমরা গাছ মাধ্যমে বর্তা চলুন, 574 00:45:56,260 --> 00:45:58,140 এবং যে আমাদের বাঁধন শর্ত মনে রাখবেন - 575 00:45:58,140 --> 00:46:01,870  যখন আমরা আসলে উদাহরণ মাধ্যমে কাজ হাতে - 576 00:46:01,870 --> 00:46:03,960 যখন আমরা একটি নাল নোড সম্মুখীন, 577 00:46:03,960 --> 00:46:05,480 , যখন আমরা একটি নাল সন্তানের দিকে তাকিয়ে না 578 00:46:05,480 --> 00:46:09,620 বরং যখন আমরা আসলে একটি নোডের মধ্যে যাও গাছ সরানো 579 00:46:09,620 --> 00:46:12,640 এবং দেখা যায় যে আমরা একটি নাল নোড করেন. 580 00:46:12,640 --> 00:46:20,720 আমরা বারবার করা যাচ্ছে না হওয়া পর্যন্ত বর্তমান যাও নাল সমান নয়. 581 00:46:20,720 --> 00:46:22,920 আমরা কি করতে যাচ্ছি? 582 00:46:22,920 --> 00:46:31,610 আমরা পরীক্ষা চলুন যদি (বর্তমান -> মান == মান), 583 00:46:31,610 --> 00:46:35,160 তারপর আমরা জানি যে প্রকৃতপক্ষে আমরা নোড যে আমরা যা খুঁজছেন তা খুঁজে পাওয়া যাচ্ছে. 584 00:46:35,160 --> 00:46:40,450 তাই এখানে, আমরা সত্য ফিরে আসতে পারেন. 585 00:46:40,450 --> 00:46:49,830 অন্যথায়, আমরা কিনা বা না মান মান কম দেখতে চাই. 586 00:46:49,830 --> 00:46:53,850 যদি বর্তমান নোড এর মান মান কম আমরা খুঁজছেন, 587 00:46:53,850 --> 00:46:57,280 এ মুহূর্তে আমরা সরাতে চলুন. 588 00:46:57,280 --> 00:47:10,600 তাই, বর্তমান = নেড়িকুত্তা -> right_child; এবং অন্যথায়, আমরা বাম সরাতে চলুন. 589 00:47:10,600 --> 00:47:17,480 নেড়িকুত্তা = নেড়িকুত্তা -> left_child;. চমত্কার সহজ. 590 00:47:17,480 --> 00:47:22,830 >> আপনি সম্ভবত যে লুপ দেখায় এই অনুরূপ থেকে চিনতে 591 00:47:22,830 --> 00:47:27,580 তারপর ছাড়া বাইনারি অনুসন্ধান আগে শব্দটি, আমরা কম, মধ্য ও উচ্চ সাথে ডিল করা হয়. 592 00:47:27,580 --> 00:47:30,000 এখানে, আমরা শুধু একটি বর্তমান মান তাকান আছে, 593 00:47:30,000 --> 00:47:31,930 তাই সুন্দর এবং সহজ. 594 00:47:31,930 --> 00:47:34,960 চলুন শুরু করা যাক নিশ্চিত হোন যে, এই কোড কাজ করছে. 595 00:47:34,960 --> 00:47:42,780 প্রথমত, এটা নিশ্চিত প্রনয়ন করা. এটা আছে মনে হচ্ছে. 596 00:47:42,780 --> 00:47:47,920 চলুন এটি চালানোর চেষ্টা. 597 00:47:47,920 --> 00:47:50,160 এবং সত্যিই, সেটা ছাপে যা আমরা আশা আউট. 598 00:47:50,160 --> 00:47:54,320 এটা গাছ 6 খুঁজে বের করে, কারণ 10 গাছ আছে খুঁজে না 10 না, 599 00:47:54,320 --> 00:47:57,740 এবং হয় না খুঁজে 1 না কারণ 1 এর এছাড়াও গাছ না. 600 00:47:57,740 --> 00:48:01,420 কুল উপাদান. 601 00:48:01,420 --> 00:48:04,470 >> ঠিক আছে. চলুন আমাদের ফিরে যেতে স্পেসিফিকেশন কি এবং এর পরের দেখুন. 602 00:48:04,470 --> 00:48:07,990 এখন, এটি আমাদের আরো কিছু গাছ যাও নোড যুক্ত করতে চায়. 603 00:48:07,990 --> 00:48:11,690 এটি 5, 2, এবং 8, যোগ এবং নিশ্চিত করুন যে কোড আছে আমাদের করতে চায় 604 00:48:11,690 --> 00:48:13,570 এখনও কাজ হিসাবে প্রত্যাশিত. 605 00:48:13,570 --> 00:48:14,900 চলুন শুরু করা যাক যে যান না. 606 00:48:14,900 --> 00:48:19,430 এই সময়ে, বরং যে বিরক্তিকর কপি এবং পেস্ট আবার করছেন, 607 00:48:19,430 --> 00:48:23,770 যাক এর প্রকৃতপক্ষে একটি নোড নির্মাণ একটি ফাংশন লিখুন. 608 00:48:23,770 --> 00:48:27,740 যদি আমরা স্ক্রল প্রধান যাও সব উপায় নিচে, আমরা দেখতে যে আমরা এই কাজ করছি 609 00:48:27,740 --> 00:48:31,210 এবং উপর আবার প্রতিটি সময় যে আমরা একটি নোড তৈরি করতে চান তাদের খুব অনুরূপ কোড. 610 00:48:31,210 --> 00:48:39,540 >> যাক এর একটি ফাংশন যা আসলে আমাদের জন্য একটি নোড নির্মাণ করা হবে এবং এটি ফেরত লিখুন. 611 00:48:39,540 --> 00:48:41,960 আমি এটা build_node কল যাচ্ছি. 612 00:48:41,960 --> 00:48:45,130 আমি কোনো নির্দিষ্ট মান সঙ্গে একটি নোড নির্মাণ করা যাচ্ছে না. 613 00:48:45,130 --> 00:48:51,040 এখানে জুম ইন করুন. 614 00:48:51,040 --> 00:48:56,600 প্রথম জিনিস আমি করতে যাচ্ছি প্রকৃতপক্ষে হিপ নোডের জন্য জায়গা তৈরি করতে. 615 00:48:56,600 --> 00:49:05,400 সুতরাং, নোড * n = malloc (sizeof (নোড)); n -> মূল্য = মান; 616 00:49:05,400 --> 00:49:14,960 এবং তারপর এখানে, আমি ক্ষেত্রগুলি সব থেকে উপযুক্ত মান হতে আরম্ভ করছি যাচ্ছে. 617 00:49:14,960 --> 00:49:22,500 এবং খুব শেষে, আমরা আমাদের নোডের মধ্যে ফিরে আসবেন. 618 00:49:22,500 --> 00:49:28,690 ঠিক আছে. একটি বিষয় উল্লেখ্য যে এই ফাংশন অধিকার এখানে 619 00:49:28,690 --> 00:49:34,320 মেমরি যে গাদা-বরাদ্দ করা হয়েছে একটি পয়েন্টার ফেরত যাচ্ছে. 620 00:49:34,320 --> 00:49:38,880 কি এই সম্পর্কে চমৎকার হয় এখন যে এই নোডের - 621 00:49:38,880 --> 00:49:42,420 আমরা হিপ কারণ এটি যদি আমরা স্ট্যাকের উপর এটি ঘোষিত ডিক্লেয়ার করা আছে 622 00:49:42,420 --> 00:49:45,050 আমরা ভালো এই ফাংশনে এটা করতে পারব না. 623 00:49:45,050 --> 00:49:47,690 যে মেমরি সুযোগ অফ যান আউট করবে 624 00:49:47,690 --> 00:49:51,590 অবৈধ এবং যদি আমরা সেটা পরে অ্যাক্সেস করার চেষ্টা করা হবে. 625 00:49:51,590 --> 00:49:53,500 যেহেতু আমরা গাদা-মেমরি বরাদ্দ ঘোষণা করা হয়, 626 00:49:53,500 --> 00:49:55,830 আমরা পরে freeing যত্ন নিতে যাচ্ছে 627 00:49:55,830 --> 00:49:58,530 আমাদের প্রোগ্রামের জন্য কোন মেমরি ফুটা করা হইনি. 628 00:49:58,530 --> 00:50:01,270 আমরা যা করেছি কোডের punting অন্য সব কিছুর জন্য করা হয়েছে 629 00:50:01,270 --> 00:50:02,880 শুধু জন্য সময় সরলতা দোহাই, 630 00:50:02,880 --> 00:50:05,610 কিন্তু যদি কখনও কোন একটি ফাংশন ভালো যে দেখায় লিখুন 631 00:50:05,610 --> 00:50:10,370 যেখানে আপনি পেয়েছেন - কিছু কল করার জন্য এটি একটি ভিতর malloc বা realloc - 632 00:50:10,370 --> 00:50:14,330 আপনি কি নিশ্চিত যে আপনি মন্তব্য নেই কিছু সাজান করা এখনে যে করতে চাই, 633 00:50:14,330 --> 00:50:29,970 হেই, আপনি কি জানেন, এক গাদা-বরাদ্দ নোড পাস-মান সঙ্গে সক্রিয়া ফেরৎ. 634 00:50:29,970 --> 00:50:33,600 এবং তারপরে আপনি কি নিশ্চিত যে আপনি মনে রাখবেন যে কিছু সাজানোর রাখা করতে চাই 635 00:50:33,600 --> 00:50:41,720 আহ্বানকারী ফিরে মেমরি মুক্ত হবে. 636 00:50:41,720 --> 00:50:45,450 এইভাবে, যদি কখনও কারো যায় এবং যে ফাংশন ব্যবহার করে, 637 00:50:45,450 --> 00:50:48,150 তারা জানেন যে যাই হোক না কেন তারা যে ফাংশান থেকে ফিরে পেতে 638 00:50:48,150 --> 00:50:50,870 কিছু সময়ে করা মুক্ত করতে হবে. 639 00:50:50,870 --> 00:50:53,940 >> Assuming যে সব আছে এখানে বেশ, ভালো কথা, 640 00:50:53,940 --> 00:51:02,300 আমরা আমাদের কোড ঢোকা নিচে এবং এই লাইনের সব অধিকার এখানে প্রতিস্থাপন করতে পারেন 641 00:51:02,300 --> 00:51:05,410 আমাদের সাথে কল বিল্ড নোড ফাংশন. 642 00:51:05,410 --> 00:51:08,170 চলুন যে সত্যিই দ্রুত না. 643 00:51:08,170 --> 00:51:15,840 এক অংশ যে আমরা প্রতিস্থাপন চলুন না এই অংশ নিচে এখানে 644 00:51:15,840 --> 00:51:18,520 নীচে যেখানে আসলে আমরা নোড তারের আপ একে অপরের দিকে নির্দেশ করে, 645 00:51:18,520 --> 00:51:21,030 যে কারণে আমরা আমাদের কাজ করতে না পারেন. 646 00:51:21,030 --> 00:51:37,400 কিন্তু, আমি কি করতে root = build_node (7); নোড * তিনটি = build_node (3); 647 00:51:37,400 --> 00:51:47,980 নোড * ছয় = build_node (6); নোড * নয়টি = build_node (9);. 648 00:51:47,980 --> 00:51:52,590 এবং এখন, আমরা যাও জন্য নোড যোগ চেয়েছিলেন - 649 00:51:52,590 --> 00:52:03,530 নোড * পাঁচটি = build_node (5); নোড * = build_node আট (8); 650 00:52:03,530 --> 00:52:09,760 এবং কি ছিল অন্যান্য নোডের? এর এখানে দেখতে দিন. আমরা আরও একটি 2 যোগ চেয়েছিলেন - 651 00:52:09,760 --> 00:52:20,280 নোড * দুই = build_node (2);. 652 00:52:20,280 --> 00:52:26,850 ঠিক আছে. এই মুহুর্তে, আমরা জানি যে আমরা 7, 3, 9, এবং 6 পেয়েছেন 653 00:52:26,850 --> 00:52:30,320 সব তারযুক্ত উপযুক্তভাবে আপ, কিন্তু কি 5, 8, এবং 2? 654 00:52:30,320 --> 00:52:33,550 যথাযত ক্রম সবকিছুই রাখা, 655 00:52:33,550 --> 00:52:39,230 আমরা জানি যে এর তিনটি সন্তানের অধিকার 6. 656 00:52:39,230 --> 00:52:40,890 সুতরাং, যদি আমরা 5 যোগ চলুন, 657 00:52:40,890 --> 00:52:46,670 5 'এ গাছ ডানদিকে যা 3 হয় root এ জন্যে, 658 00:52:46,670 --> 00:52:50,440 তাই 5 6 বাম হিসাবে সন্তানের জন্যে. 659 00:52:50,440 --> 00:52:58,650 আমরা বলে ছয়, এটা করতে পারেন -> left_child = পাঁচটি; 660 00:52:58,650 --> 00:53:10,790 এবং তারপর 8 9 বাম হিসাবে সন্তানের জন্যে, তাই নয় -> left_child = আট; 661 00:53:10,790 --> 00:53:22,190 এবং তারপর 2 3 বাম সন্তানের, তাই আমরা যে কি আপ করতে পারেন এখানে - তোমাকে -> left_child = দুই;. 662 00:53:22,190 --> 00:53:27,730 আপনি যদি পুরোপুরি অনুসরণ করতে না যে এর সঙ্গে কোন বরাবর, আমি আপনাকে পরামর্শ দিচ্ছি আপনি এটা নিজের আঁকা. 663 00:53:27,730 --> 00:53:35,660 >> ঠিক আছে. চলুন এই সংরক্ষণ করুন. চলুন শুরু করা যাক আউট যান এবং নিশ্চিত করুন যে প্রনয়ন করা, 664 00:53:35,660 --> 00:53:40,760 এবং তারপর আমরা আমাদের রয়েছে কল মধ্যে যোগ করতে পারেন. 665 00:53:40,760 --> 00:53:44,120 দেখে মনে হচ্ছে এখনও সবকিছু প্রনয়ন. 666 00:53:44,120 --> 00:53:51,790 যাক এর মধ্যে যান এবং কিছু কল উপস্থিত যোগ করুন. 667 00:53:51,790 --> 00:53:59,640 আবার, আমি একটা কপি এবং পেস্ট সামান্য বিট করতে যাচ্ছি. 668 00:53:59,640 --> 00:54:15,860 এখন let এর 5, 8, এবং 2 অনুসন্ধান করার জন্য. ঠিক আছে. 669 00:54:15,860 --> 00:54:28,330 চলুন শুরু করা যাক এরপর নিশ্চিত হোন যে এই সব দেখায় এখনও ভাল. গ্রেট! এবং সংরক্ষণ করে প্রস্থান করার. 670 00:54:28,330 --> 00:54:33,220 এখন এর জন্য লেট, কম্পাইল, এবং এখন এর চালানো যাক. 671 00:54:33,220 --> 00:54:37,540 ফলাফল থেকে, এটা দেখে মনে হচ্ছে সমস্তকিছু সুন্দর এবং ভাল কাজ করছে. 672 00:54:37,540 --> 00:54:41,780 গ্রেট! তাই এখন আমরা আমাদের রয়েছে লিখিত ফাংশন পেয়েছেন. 673 00:54:41,780 --> 00:54:46,160 নেভিগেশন এড়িয়ে চলুন এবং সরানো কিভাবে গাছ মধ্যে যাও নোড সন্নিবেশ কাজ শুরু 674 00:54:46,160 --> 00:54:50,000 যেহেতু, আমরা এখন অধিকার করছেন, জিনিষ খুব সুন্দর হয় না. 675 00:54:50,000 --> 00:54:52,280 >> যদি আমরা বৈশিষ্টে ফিরে যান, 676 00:54:52,280 --> 00:55:00,540 এটি একটি ফাংশন বলা সন্নিবেশ লিখুন আমাদের জিজ্ঞেস করে - আবার, একটি bool ফিরে 677 00:55:00,540 --> 00:55:04,400 না কিনা অথবা জন্য আমরা আসলে গাছ নোডের মধ্যে সন্নিবেশ করতে পারে নি - 678 00:55:04,400 --> 00:55:07,710 এবং তারপর মান গাছ মধ্যে সন্নিবেশ যাও হিসাবে উল্লেখ করা হয় 679 00:55:07,710 --> 00:55:11,060 আমাদের সন্নিবেশ ফাংশন শুধুমাত্র যুক্তি. 680 00:55:11,060 --> 00:55:18,180 আমরা সত্য যদি আমরা সত্যিই ট্রি ধারণকারী নোডের মধ্যে মান সন্নিবেশ করুন পারে প্রত্যাবর্তন করবে, 681 00:55:18,180 --> 00:55:20,930 যার মানে হচ্ছে যে আমরা, এক, পর্যাপ্ত মেমরি ছিল, 682 00:55:20,930 --> 00:55:24,840 এবং তারপর দুই, ইতিমধ্যে যে নোড থেকে গাছ মধ্যে উপস্থিত না - 683 00:55:24,840 --> 00:55:32,170 মনে রাখবেন, আমরা ট্রির প্রতিলিপি মান আছে, আছে যাচ্ছে না জিনিসের সহজ করা. 684 00:55:32,170 --> 00:55:35,590 ঠিক আছে. কোড ব্যাক. 685 00:55:35,590 --> 00:55:44,240 এটি আপ খুলুন. একটু বড় করে দেখুন, তারপর নিচে স্ক্রোল করুন. 686 00:55:44,240 --> 00:55:47,220 যাক এর অধিকার রয়েছে উপরের ফাংশন সন্নিবেশ করা. 687 00:55:47,220 --> 00:55:56,360 আবার, এটি করা হবে নামক bool সন্নিবেশ (int মান) যাও যাচ্ছে. 688 00:55:56,360 --> 00:56:01,840 এটি একটি সামান্য আরো স্থান দিন, এবং তারপর একটি ডিফল্ট হিসাবে,, 689 00:56:01,840 --> 00:56:08,870 যাক ফিরে খুব শেষে মিথ্যা রাখা. 690 00:56:08,870 --> 00:56:22,620 এখন নিচে নীচে, আসুন এগিয়ে পরিবর্তে নিজে নোড নির্মাণের যান 691 00:56:22,620 --> 00:56:27,900 প্রধান নিজেদেরকে এবং তাদের তারের আপ অপরের মত আমরা করছেন দিকে নির্দেশ করে, 692 00:56:27,900 --> 00:56:30,600 আমরা কি সেটা আমাদের সন্নিবেশ কার্যকারিতা নির্ভর করব. 693 00:56:30,600 --> 00:56:35,510 আমরা আমাদের সন্নিবেশ কার্যকারিতা নির্ভর করা হবে না গোড়া থেকে সম্পূর্ণ গাছ এখনও নির্মাণ, 694 00:56:35,510 --> 00:56:39,970 বরং আমরা এই লাইন পরিত্রাণ পাবেন - we'll এই লাইন আউট মন্তব্য - 695 00:56:39,970 --> 00:56:43,430 যে নোড 5, 8, এবং 2 নির্মাণ. 696 00:56:43,430 --> 00:56:55,740 এবং এর পরিবর্তে, আমরা আমাদের কল সন্নিবেশ ফাংশন প্রবেশ করাতে হবে 697 00:56:55,740 --> 00:57:01,280 নিশ্চিত করুন যে আসলে যে কাজ করা. 698 00:57:01,280 --> 00:57:05,840 আমরা শুরু করছি. 699 00:57:05,840 --> 00:57:09,300 >> এখন আমরা এই লাইন মন্তব্য আউট করেছি. 700 00:57:09,300 --> 00:57:13,700 আমরা কেবল এই সময়ে আমাদের গাছ 7, 3, 9, এবং 6 আছে. 701 00:57:13,700 --> 00:57:18,870 নিশ্চিত করুন যে এই সব কাজ করতে হয়, 702 00:57:18,870 --> 00:57:25,050 আমরা আউট, জুম আমাদের বাইনারি ট্রি করতে পারেন, 703 00:57:25,050 --> 00:57:30,750 এটি চালানো এবং আমরা যে উপস্থিত হয় এখন আমাদের যে আমরা সম্পূর্ণ অধিকার দেখতে পারেন - 704 00:57:30,750 --> 00:57:33,110 5, 8, এবং 2 ট্রি উপলব্ধ নয়. 705 00:57:33,110 --> 00:57:37,960 কোড ফিরে যান, 706 00:57:37,960 --> 00:57:41,070 এবং কিভাবে আমরা প্রবেশ করতে যাচ্ছি? 707 00:57:41,070 --> 00:57:46,290 মনে রাখবেন যে আমরা কি কি আসলে যখন আমরা 5 ঢোকাতে হয়, 8, এবং 2 পূর্বে. 708 00:57:46,290 --> 00:57:50,100 আমরা যে Plinko খেলাটি যেখানে আমরা root-এ শুরু, 709 00:57:50,100 --> 00:57:52,780 গিয়েছিলাম এক এক গাছ এক নিচে 710 00:57:52,780 --> 00:57:54,980 যতক্ষণ না আমরা যথাযথ ফাঁক পাওয়া গেছে, 711 00:57:54,980 --> 00:57:57,570 এবং তারপর নোডের মধ্যে আমরা যথাযথ স্থানে তারযুক্ত. 712 00:57:57,570 --> 00:57:59,480 আমরা একই জিনিস করে যাচ্ছেন. 713 00:57:59,480 --> 00:58:04,070 এই কোড যে আমরা ব্যবহৃত লেখা ভালো মূলত ফাংশন রয়েছে 714 00:58:04,070 --> 00:58:05,910 যাও স্পট যেখানে নোড হওয়া উচিত, 715 00:58:05,910 --> 00:58:10,560 এবং তারপর আমরা নোড সঠিক আছে সন্নিবেশ করছি যাচ্ছে. 716 00:58:10,560 --> 00:58:17,000 চলুন শুরু করা যাক যে শুরু করছেন. 717 00:58:17,000 --> 00:58:24,200 >> সুতরাং আমরা একটি নোড * নেড়িকুত্তা = রুট আছে; আমরা ঠিক করছি কোড আছে অনুসরণ যাচ্ছে 718 00:58:24,200 --> 00:58:26,850 যতক্ষণ না আমরা দেখি যে এটা আমাদের জন্য বেশ কাজ করে না. 719 00:58:26,850 --> 00:58:32,390 আমরা গাছ মধ্যে দিয়ে যাচ্ছে যখন বর্তমান উপাদান নাল নয়, 720 00:58:32,390 --> 00:58:45,280 এবং যদি আমরা দেখি যে বর্তমান এর মান সমান মান যে আমরা সন্নিবেশ করার চেষ্টা করছি - 721 00:58:45,280 --> 00:58:49,600 ভাল, এই এক ক্ষেত্রে যা আসলে আমরা নোডের অন্তর্ভুক্ত করা যায়নি 722 00:58:49,600 --> 00:58:52,730 মধ্যে ট্রি কারণ এই অর্থ আমরা একটি প্রতিলিপি মান আছে. 723 00:58:52,730 --> 00:58:59,010 এখানে আসলে আমরা মিথ্যা প্রত্যাবর্তন করছেন না. 724 00:58:59,010 --> 00:59:08,440 এখন, বর্তমান এর মান যদি অন্য মান কম, 725 00:59:08,440 --> 00:59:10,930 এখন আমরা জানি যে আমরা অধিকার সরানো 726 00:59:10,930 --> 00:59:17,190  কারণ মান নেড়িকুত্তা ট্রি অধিকার অর্ধেক জন্যে. 727 00:59:17,190 --> 00:59:30,110 অন্যথায়, আমরা বাম সরাতে চলুন. 728 00:59:30,110 --> 00:59:37,980 মূলত আমাদের মধ্যে রয়েছে চালনার অধিকার আছে. 729 00:59:37,980 --> 00:59:41,820 >> এই মুহুর্তে একবার, যখন আমরা এই লুপ সম্পন্ন করেছেন, 730 00:59:41,820 --> 00:59:47,350 আমাদের বর্তমান পয়েন্টার করা হবে প্রতি নির্দেশ যাও নাল যাচ্ছে 731 00:59:47,350 --> 00:59:51,540 যদি ইতিমধ্যে ফাংশন ফিরে না করেনি. 732 00:59:51,540 --> 00:59:58,710 সুতরাং আমরা করছি স্থানে বর্তমান হচ্ছে যেখানে আমরা নতুন নোডের মধ্যে সন্নিবেশ করতে চান. 733 00:59:58,710 --> 01:00:05,210 কি করা যায় অবশেষ যাও যাও আসলে নতুন নোড নির্মাণ করা হয়, 734 01:00:05,210 --> 01:00:08,480 যা আমরা চমত্কার সহজেই করতে পারেন. 735 01:00:08,480 --> 01:00:14,930 আমরা আমাদের অতি - কুশলী বিল্ড নোড ফাংশন ব্যবহার করতে পারেন, 736 01:00:14,930 --> 01:00:17,210 এবং কিছু যে আমরা আগে না কি - 737 01:00:17,210 --> 01:00:21,400 আমরা ঠিক ধরিয়া ধরনের নেন কিন্তু এখন আমরা ঠিক নিশ্চিত করার জন্য চেষ্টা করব - 738 01:00:21,400 --> 01:00:27,130 আমরা নিশ্চিত যে মান নতুন নোড দ্বারা ফিরে আসলে পরীক্ষা করা হবে 739 01:00:27,130 --> 01:00:33,410 নাল না, কারণ আমরা যে মেমরি অ্যাক্সেস যদি এটা নাল শুরু করতে না চান. 740 01:00:33,410 --> 01:00:39,910 আমরা নিশ্চিত করুন যে নতুন নোডের নাল সমান হয় না তা পরীক্ষা করতে পারবেন. 741 01:00:39,910 --> 01:00:42,910 অথবা এর পরিবর্তে, আমরা দেখতে যদি প্রকৃতপক্ষে এটা নাল করতে পারেন, 742 01:00:42,910 --> 01:00:52,120 এবং যদি এটা নাল তারপর, আমরা ফিরে মিথ্যা তাড়াতাড়ি পারেন. 743 01:00:52,120 --> 01:00:59,090 >> এই সময়ে, আমরা তার গাছ উপযুক্ত স্পট মধ্যে নতুন নোডের তারের আছে. 744 01:00:59,090 --> 01:01:03,510 যদি আমরা মূল ফিরে এবং যেখানে আমরা আসলে আগে মান তারের, 745 01:01:03,510 --> 01:01:08,470 আমরা দেখতে যে ভাবে আমরা এটি ছিল করছেন যখন আমরা গাছ 3 লাগাতে চেয়েছিল 746 01:01:08,470 --> 01:01:11,750 আমরা মূল বাম সন্তানের ব্যবহার. 747 01:01:11,750 --> 01:01:14,920 যখন আমরা গাছ 9 করা, আমরা root-র অধিকার সন্তানের অ্যাক্সেস ছিল. 748 01:01:14,920 --> 01:01:21,030 আমরা ঊর্ধ্বতন একটি পয়েন্টার যাতে গাছ মধ্যে একটি নতুন মান স্থাপন করা আছে ছিল. 749 01:01:21,030 --> 01:01:24,430 স্ক্রল আপ ফিরে যাও সন্নিবেশ, যে এখানে পুরোপুরি কাজ করে যাচ্ছে না 750 01:01:24,430 --> 01:01:27,550 কারণ আমরা একটি ঊর্ধ্বতন পয়েন্টার নেই. 751 01:01:27,550 --> 01:01:31,650 কি আমরা করতে সক্ষম হতে চান এই সময়ে হয়,, 752 01:01:31,650 --> 01:01:37,080 পিতা বা মাতা এবং এর মান চেক দেখুন - ভাল, ভগবন্, 753 01:01:37,080 --> 01:01:41,990 যদি পিতা বা মাতা এর মান বর্তমান মান কম, 754 01:01:41,990 --> 01:01:54,440 তারপর ঊর্ধ্বতন এর ডান সন্তানের নতুন নোড হতে হবে; 755 01:01:54,440 --> 01:02:07,280 অন্যথায়, ঊর্ধ্বতন এর বাম সন্তানের নতুন নোডের মধ্যে হওয়া উচিত. 756 01:02:07,280 --> 01:02:10,290 কিন্তু, আমরা খুব কাছে এই পিতা বা মাতা পয়েন্টার না. 757 01:02:10,290 --> 01:02:15,010 >> যাতে এটা পেতে, আসলে আমরা এটা ট্র্যাক আছে করছেন যাচ্ছে হিসাবে আমরা গাছ দিয়ে যেতে 758 01:02:15,010 --> 01:02:18,440 এবং আমাদের উপরে লুপ যথাযথ স্পট খুঁজে. 759 01:02:18,440 --> 01:02:26,840 আমরা স্ক্রলিং দ্বারা যে ব্যাক আপ কি আমাদের সন্নিবেশ ফাংশন শীর্ষে পারেন 760 01:02:26,840 --> 01:02:32,350 এবং অন্য পয়েন্টার পরিবর্তনশীল ট্র্যাকিং অভিভাবক বলা হয়. 761 01:02:32,350 --> 01:02:39,340 আমরা প্রাথমিকভাবে নাল এটা সমান সেট চলুন, 762 01:02:39,340 --> 01:02:43,640 এবং তারপর প্রতিটি সময় আমরা গাছ দিয়ে যেতে, 763 01:02:43,640 --> 01:02:51,540 আমরা ঊর্ধ্বতন পয়েন্টার বর্তমান পয়েন্টার মেলে সেট চলুন. 764 01:02:51,540 --> 01:02:59,140 পিতা বা মাতা সমান বর্তমান সেট করুন. 765 01:02:59,140 --> 01:03:02,260 এই পথ, প্রতিটি সময় আমরা মধ্য দিয়ে যেতে হবে, 766 01:03:02,260 --> 01:03:05,550 আমরা যে হিসাবে বর্তমান পয়েন্টার মান বৃদ্ধি পায় তা নিশ্চিত করার জন্য চলুন 767 01:03:05,550 --> 01:03:12,640 পিতা বা মাতা পয়েন্টার এটি অনুসরণ করে - ট্রি বর্তমান পয়েন্টার তুলনায় মাত্র এক স্তর ওপরে বেশী. 768 01:03:12,640 --> 01:03:17,370 যে সমস্ত সুন্দর দেখায় ভালো. 769 01:03:17,370 --> 01:03:22,380 >> আমি মনে করি যে আমরা এক জিনিস পরিবর্তন করতে চাইবেন এই নোডের ফিরে নাল নির্মাণ. 770 01:03:22,380 --> 01:03:25,380 যাতে নোড সফলভাবে আসলে নাল ফিরে পেতে নির্মাণ, 771 01:03:25,380 --> 01:03:31,060 আমরা যে কোড সংশোধন করতে হবে, 772 01:03:31,060 --> 01:03:37,270 এখানে কারণ, আমরা নিশ্চিত যে malloc একটি বৈধ পয়েন্টার ফেরত না পরীক্ষা না. 773 01:03:37,270 --> 01:03:53,390 সুতরাং, যদি (ঢ = শূন্য!), তারপর - 774 01:03:53,390 --> 01:03:55,250 যদি malloc একটি বৈধ পয়েন্টার ফেরত তারপর, আমরা এটি আরম্ভ করা হবে; 775 01:03:55,250 --> 01:04:02,540 অন্যথায়, আমরা ফিরে যান এবং যে পর্যন্ত আমাদের জন্য নাল ফিরে শেষ করব. 776 01:04:02,540 --> 01:04:13,050 এখন সব সুন্দর দেখায় ভালো. চলুন নিশ্চিত এই প্রকৃতপক্ষে প্রনয়ন করা. 777 01:04:13,050 --> 01:04:22,240 বাইনারি গাছ, তার এবং উহু, আমরা কিছু উপাদান যাচ্ছে এখানে পেয়েছেন. 778 01:04:22,240 --> 01:04:29,230 >> আমরা একটি ফাংশন অন্তর্নিহিত ঘোষণা নোড নির্মাণের পেয়েছেন. 779 01:04:29,230 --> 01:04:31,950 এই কম্পাইলার দিয়ে আবার, আমরা উপরের শুরু চলুন. 780 01:04:31,950 --> 01:04:36,380 এর অর্থ কি হবে যে আমি নোড নির্মাণের আহ্বান আগে আসলে আমি এটি করেছি ঘোষণা করছি. 781 01:04:36,380 --> 01:04:37,730 যাক এর কোড ফিরে যেতে সত্যিই দ্রুত. 782 01:04:37,730 --> 01:04:43,510 নীচে স্ক্রোল করুন, এবং নিশ্চিত যথেষ্ট, আমার সন্নিবেশ ফাংশন ঘোষিত হয় 783 01:04:43,510 --> 01:04:47,400 বিল্ড নোডের উপরের ফাংশন, 784 01:04:47,400 --> 01:04:50,070 কিন্তু আমি এর সন্নিবেশ ভিতরে নোড নির্মাণের ব্যবহার করার চেষ্টা করছি. 785 01:04:50,070 --> 01:05:06,610 আমি এবং কপি ঢুকা যাচ্ছে না - এবং তারপর বিল্ড নোড ফাংশন পথ আটকান শীর্ষে আপ এখানে. 786 01:05:06,610 --> 01:05:11,750 এই ভাবে আশা, যে কাজ করা. এর দিন যাক এই অন্য যান. 787 01:05:11,750 --> 01:05:18,920 এখন এটি সমস্ত প্রনয়ন. সমস্ত ভাল. 788 01:05:18,920 --> 01:05:21,640 >> কিন্তু এই সময়ে, আমরা আমাদের সন্নিবেশ ফাংশন বলা আসলে আছে না. 789 01:05:21,640 --> 01:05:26,510 আমরা শুধু জানি যে এটা কম্পাইল করা, তাই আসুন যান এবং কিছু কল ইন করা 790 01:05:26,510 --> 01:05:28,240 চলুন শুরু করা যাক আমাদের প্রধান কাজ যে. 791 01:05:28,240 --> 01:05:32,390 এখানে, আমরা মন্তব্য 5, 8, এবং 2 আউট, 792 01:05:32,390 --> 01:05:36,680 এবং তারপর আমরা তারের আপ না ডাউন তাদের এখানে. 793 01:05:36,680 --> 01:05:41,640 এর কিছু কল সন্নিবেশ করা যাক, 794 01:05:41,640 --> 01:05:46,440 এবং আসুন এছাড়াও স্টাফ একই ধরনের যে আমরা ব্যবহৃত ব্যবহার 795 01:05:46,440 --> 01:05:52,810 যখন আমরা নিশ্চিত যে সব ঢোকানো হয়নি সঠিকভাবে শুরু করতে এই printf কল করেছে. 796 01:05:52,810 --> 01:06:00,550 আমি কপি এবং পেস্ট করুন চলেছি, 797 01:06:00,550 --> 01:06:12,450 পরিবর্তে রয়েছে এবং আমরা সন্নিবেশ করতে যাচ্ছেন. 798 01:06:12,450 --> 01:06:30,140 এবং পরিবর্তে 6, 10, এবং 1, আমরা 5, 8, এবং 2 ব্যবহার চলুন. 799 01:06:30,140 --> 01:06:37,320 এই আশা গাছ মধ্যে 5, 8, এবং 2 সন্নিবেশ করা উচিত. 800 01:06:37,320 --> 01:06:44,050 সঙ্কলন. সমস্ত ভাল. এখন আমরা আসলে আমাদের প্রোগ্রাম চালানো হবে. 801 01:06:44,050 --> 01:06:47,330 >> সবকিছু ফিরে মিথ্যা. 802 01:06:47,330 --> 01:06:53,830 সুতরাং, 5, 8, এবং 2, এবং না যাওয়া এটা মনে হয় রয়েছে তাদের খুঁজে পান না. 803 01:06:53,830 --> 01:06:58,890 যাচ্ছে কি করছেন? চলুন জুম আউট. 804 01:06:58,890 --> 01:07:02,160 প্রথম সমস্যা ছিল যে সন্নিবেশ মিথ্যা প্রত্যাবর্তন করলো, 805 01:07:02,160 --> 01:07:08,750 এবং এটা ভালো যে কারণ আমরা আমাদের রিটার্ন মিথ্যা কলে বামে, দেখতেও 806 01:07:08,750 --> 01:07:14,590 এবং আমরা ফিরে আসলে সত্য না. 807 01:07:14,590 --> 01:07:17,880 আমরা যে সেট আপ করতে পারেন. 808 01:07:17,880 --> 01:07:25,290 দ্বিতীয় সমস্যা হল এখন, এমনকি যদি আমরা না - এই সংরক্ষণ, এই প্রস্থান করার জন্য, 809 01:07:25,290 --> 01:07:34,530 আবার না চালানো হলে, আছে তারপর কম্পাইল এটি চালানোর জন্য - 810 01:07:34,530 --> 01:07:37,670 আমরা দেখতে যে অন্য কিছু এখানে ঘটেছে. 811 01:07:37,670 --> 01:07:42,980 5, 8, এবং 2 এখনও পাওয়া গাছ ছিল না. 812 01:07:42,980 --> 01:07:44,350 সুতরাং, কি করছেন? 813 01:07:44,350 --> 01:07:45,700 >> চলুন এই সময়ে একটি কোড কটাক্ষপাত. 814 01:07:45,700 --> 01:07:49,790 চলুন আমরা যদি এই জিনিসটা দেখতে পারেন. 815 01:07:49,790 --> 01:07:57,940 আমরা ঊর্ধ্বতন নাল না দিয়ে শুরু. 816 01:07:57,940 --> 01:07:59,510 আমরা বর্তমান পয়েন্টার সমান রুট পয়েন্টার সেট, 817 01:07:59,510 --> 01:08:04,280 এবং আমরা আমাদের কাজ উপায় গাছ মাধ্যমে ডাউন চলুন. 818 01:08:04,280 --> 01:08:08,650 যদি বর্তমান নোড নাল নয় তাহলে, আমরা জানি যে আমরা একটু বিট নিচে নামাও পারেন. 819 01:08:08,650 --> 01:08:12,330 আমরা সমান বর্তমান পয়েন্টার হতে আমাদের অভিভাবক পয়েন্টার সেট, 820 01:08:12,330 --> 01:08:15,420 মান চেক - যদি মান একই আমরা ফিরে মিথ্যা. 821 01:08:15,420 --> 01:08:17,540 যদি মান কম আমরা অধিকার সরানো; 822 01:08:17,540 --> 01:08:20,399 অন্যথায়, আমরা বাঁদিকে সরানো. 823 01:08:20,399 --> 01:08:24,220 তারপর আমরা একটি নোড নির্মাণের. আমি কিছুক্ষন জুম করব. 824 01:08:24,220 --> 01:08:31,410 এবং এখানে, আমরা মান তারের পর্যন্ত একই হতে চেষ্টা চলুন. 825 01:08:31,410 --> 01:08:37,250 যাচ্ছে কি করছেন? চলুন যদি সম্ভবত Valgrind আমাদের একটি ইংগিত দিতে পারে দেখুন. 826 01:08:37,250 --> 01:08:43,910 >> আমি শুধু Valgrind কারণ দ্রুত Valgrind রান ব্যবহার করার জন্য পছন্দ 827 01:08:43,910 --> 01:08:46,729 এবং বলা আছে যদি কোনো স্মৃতি ভুল থাকে. 828 01:08:46,729 --> 01:08:48,300 যখন আমরা কোডের উপর Valgrind চালানো, 829 01:08:48,300 --> 01:08:55,859 হিসাবে আপনি দেখতে পারেন অধিকার here--Valgrind./binary_tree--and আঘাত লিখুন. 830 01:08:55,859 --> 01:09:03,640 আপনি যে আমরা কোন মেমরি ত্রুটি আছে কি না, যাতে দেখে মনে হচ্ছে সবকিছু ঠিক এতদূর. 831 01:09:03,640 --> 01:09:07,529 আমরা কিছু তথ্য ফাঁসের মেমরি, যা আমরা জানি আছে না, কারণ আমরা না 832 01:09:07,529 --> 01:09:08,910 আমাদের নোড কোনো মুক্ত ঘটছে. 833 01:09:08,910 --> 01:09:13,050 চলুন GDB কি আসলে যাচ্ছে দেখতে চালানোর চেষ্টা. 834 01:09:13,050 --> 01:09:20,010 আমরা সময় gdb না. / Binary_tree করব. এটা বুট করার পরে, শুধুমাত্র জরিমানা আপ. 835 01:09:20,010 --> 01:09:23,670 যাক এর সন্নিবেশ উপর একটি বিভাজক পয়েন্ট সেট. 836 01:09:23,670 --> 01:09:28,600 যাক এর সাথে সঞ্চালিত হয়েছে. 837 01:09:28,600 --> 01:09:31,200 দেখে মনে হচ্ছে আমরা আসলে বলা সন্নিবেশ না. 838 01:09:31,200 --> 01:09:39,410 মনে হচ্ছে সমস্যা ছিল যে আমি যখন পরিবর্তিত প্রধান এখানে নিচে - 839 01:09:39,410 --> 01:09:44,279 এইসব রয়েছে থেকে printf কল সব - 840 01:09:44,279 --> 01:09:56,430 আমি আসলে এই পরিবর্তন কখনই সন্নিবেশ কল. 841 01:09:56,430 --> 01:10:01,660 এখন আমি কি এটা ব্যবহার করে দেখুন. চলুন সঙ্কলন. 842 01:10:01,660 --> 01:10:09,130 সমস্ত দেখতেও ভাল আছে. এখন এর এটি চালানোর চেষ্টা দিন, দেখুন কি ঘটে. 843 01:10:09,130 --> 01:10:13,320 ঠিক আছে! সবকিছু পরিষ্কার - পরিচ্ছন্ন দেখায় সেখানে ভাল. 844 01:10:13,320 --> 01:10:18,130 >> চূড়ান্ত জিনিস সম্পর্কে চিন্তা করা হয়, সেখানে কোনো এই সন্নিবেশ যাও প্রান্ত ক্ষেত্রে? 845 01:10:18,130 --> 01:10:23,170 এবং এটি সক্রিয় করে যে, ভাল, এক প্রান্ত ক্ষেত্রে যে সবসময় আমার মনে আকর্ষণীয় 846 01:10:23,170 --> 01:10:26,250 হয়, কি যদি আপনার গাছ খালি এবং আপনি এই সন্নিবেশ ফাংশন কল? 847 01:10:26,250 --> 01:10:30,330 এটি কাজ করবে? ওয়েল, আমি কি এটা ব্যবহার করে দেখুন. 848 01:10:30,330 --> 01:10:32,110 - Binary_tree গ. - 849 01:10:32,110 --> 01:10:35,810 আমাদের এই পরীক্ষা করতে বলছে, না আমরা আমাদের প্রধান ফাংশন নামা চলুন, 850 01:10:35,810 --> 01:10:41,690 এবং বদলে তারের ভালো এই নোডের আপ, 851 01:10:41,690 --> 01:10:56,730 আমরা শুধুমাত্র আপনার সমগ্র মন্তব্য জিনিস যাচ্ছে, 852 01:10:56,730 --> 01:11:02,620 এবং পরিবর্তে নোড নিজেদেরকে আপ তারের, 853 01:11:02,620 --> 01:11:09,400 আমরা শুধু এগিয়ে যান এবং এই সব মুছে দিতে পারেন. 854 01:11:09,400 --> 01:11:17,560 আমরা প্রবেশ করাতে একটি কল সবকিছু করতে যাচ্ছেন. 855 01:11:17,560 --> 01:11:49,020 সুতরাং, এর কাজ করি - পরিবর্তে 5, 8, এবং 2, আমরা 7, সন্নিবেশ 3, এবং 9 চলুন. 856 01:11:49,020 --> 01:11:58,440 এবং তারপর আমরা আরও 6 হিসাবে ভাল সন্নিবেশ করতে চাইবেন. 857 01:11:58,440 --> 01:12:05,190 সংরক্ষণ করুন. প্রস্থান. বাইনারি ট্রি না. 858 01:12:05,190 --> 01:12:08,540 এটা সব প্রনয়ন. 859 01:12:08,540 --> 01:12:10,320 আমরা শুধু এটা হিসাবে চালানো হয় এবং কি দেখতে পারেন, 860 01:12:10,320 --> 01:12:12,770 কিন্তু এটা সত্যিই গুরুত্বপূর্ণ হতে যাচ্ছে এটা নিশ্চিত করুন যে করা 861 01:12:12,770 --> 01:12:14,740 আমরা কোন মেমরি ত্রুটি নেই, 862 01:12:14,740 --> 01:12:16,840 এই হল আমাদের প্রান্ত ক্ষেত্রে যে আমরা জানি সে সম্পর্কে এক. 863 01:12:16,840 --> 01:12:20,150 >> চলুন শুরু করা যাক, নিশ্চিত হয়ে নেবেন যে এটা Valgrind অধীন ভাল কাজ করে, 864 01:12:20,150 --> 01:12:28,310 যা আমরা শুধু Valgrind. / binary_tree চলমান দ্বারা করব. 865 01:12:28,310 --> 01:12:31,110 দেখে মনে হচ্ছে সত্যিই আমরা এক প্রসঙ্গ থেকে একটি ত্রুটি আছে - 866 01:12:31,110 --> 01:12:33,790 আমরা এই সেগমেন্টেশন ফল্ট আছে. 867 01:12:33,790 --> 01:12:36,690 কি হয়েছিল? 868 01:12:36,690 --> 01:12:41,650 Valgrind আসলে আমাদেরকে বলে যেখানে এটা. 869 01:12:41,650 --> 01:12:43,050 একটি সামান্য বিট জুম আউট. 870 01:12:43,050 --> 01:12:46,040 দেখে মনে হচ্ছে এটা আমাদের সন্নিবেশ ফাংশন কি ঘটছে সে, 871 01:12:46,040 --> 01:12:53,420 যেখানে আমরা সন্নিবেশ একটি আকার 4 অবৈধ পঠিত আছে, লাইন 60. 872 01:12:53,420 --> 01:13:03,590 চলুন ফিরে যান এবং কি হচ্ছে এখানে দেখুন. 873 01:13:03,590 --> 01:13:05,350 জুম আউট সত্যিই দ্রুত. 874 01:13:05,350 --> 01:13:14,230 আমি নিশ্চিত যে এটা পর্দার প্রান্ত তাই আমরা সবকিছু দেখতে পারেন না যেতে করতে চাই. 875 01:13:14,230 --> 01:13:18,760 অল্প যে টানুন. ঠিক আছে. 876 01:13:18,760 --> 01:13:35,030 স্ক্রোল ডাউন, এবং সমস্যার সঠিক এখানে. 877 01:13:35,030 --> 01:13:40,120 যদি আমরা পেতে নিচে কি হয় এবং আমাদের বর্তমান নোড ইতিমধ্যে নাল, 878 01:13:40,120 --> 01:13:44,010 আমাদের পিতা বা মাতা নোড হল নাল, তাই যদি আমরা খুব উপরের ডান, এখানে তাকান আপ - 879 01:13:44,010 --> 01:13:47,340 যদি এই সময় লুপ আসলে কখনও করুন 880 01:13:47,340 --> 01:13:52,330 কারণ আমাদের বর্তমান মান নাল - আমাদের রুট হল নাল তাই বর্তমান হয় নাল - 881 01:13:52,330 --> 01:13:57,810 তারপর আমাদের পিতা বা মাতা বর্তমান বা একটি বৈধ মান সেট না পরার, 882 01:13:57,810 --> 01:14:00,580 তাই, এছাড়াও ঊর্ধ্বতন নাল হতে হবে. 883 01:14:00,580 --> 01:14:03,700 আমরা যে জন্য চেক মনে রাখতে প্রয়োজন 884 01:14:03,700 --> 01:14:08,750 আমরা সময় দ্বারা পেতে এখানে নিচে, এবং আমরা শুরু ঊর্ধ্বতন এর মান অ্যাক্সেস. 885 01:14:08,750 --> 01:14:13,190 তাই, কি? ওয়েল, যদি পিতা বা মাতা হয় নাল - 886 01:14:13,190 --> 01:14:17,990 যদি (পিতা বা মাতা == NULL) - তারপর আমরা জানি যে, 887 01:14:17,990 --> 01:14:19,530 হতে গাছ মধ্যে কিছু আছে অবশ্যই. 888 01:14:19,530 --> 01:14:22,030 আমরা চেষ্টা করে root-এ এটি সন্নিবেশ করা আবশ্যক. 889 01:14:22,030 --> 01:14:32,570 আমরা শুধুমাত্র root-র সমান নতুন নোডের সেটিং দ্বারা তা করতে পারে. 890 01:14:32,570 --> 01:14:40,010 তারপর এই সময়ে, আমরা এইসব অন্যান্য জিনিসের মধ্য দিয়ে যেতে চান, আসলে না. 891 01:14:40,010 --> 01:14:44,780 পরিবর্তে, এখানে ডান, হয় আমরা একটি অন্যথায়--অন্যথায় যদি করতে পারেন, 892 01:14:44,780 --> 01:14:47,610 অথবা আমরা সবকিছু মেশা একটি অন্যথায় এখানে যেতে পারেন, 893 01:14:47,610 --> 01:14:56,300 কিন্তু এখানে শুধু আমরা ব্যবহার করি অন্য উপায় এবং এটি যে করব. 894 01:14:56,300 --> 01:14:59,030 এখন, আমরা নিশ্চিত করতে আমাদের যে পিতা বা মাতা নাল না পরীক্ষা চলুন 895 01:14:59,030 --> 01:15:02,160 তারপর আগে আসলে তার ক্ষেত্র অ্যাক্সেস করার চেষ্টা. 896 01:15:02,160 --> 01:15:05,330 এটি আমাদের সেগমেন্টেশন ফল্ট এড়ানো সম্ভব হবে. 897 01:15:05,330 --> 01:15:14,740 সুতরাং, আমরা প্রস্থান করার জন্য, জুম আউট, কম্পাইল, রান. 898 01:15:14,740 --> 01:15:18,130 >> কোনো ত্রুটি, কিন্তু আমরা এখনও মেমরি তথ্য ফাঁসের একটি গুচ্ছ আছে 899 01:15:18,130 --> 01:15:20,650 কারণ আমরা আমাদের নোড কোনো মুক্ত ছিল না. 900 01:15:20,650 --> 01:15:24,350 কিন্তু, যদি আমরা যেতে এখানে আপ এবং আমরা আমাদের আউটে তাকান, 901 01:15:24,350 --> 01:15:30,880 আমরা দেখতে যে ভাল, আমাদের টিপে সব ভালো, দেখতেও সত্য ফিরে, যা ভাল হয়. 902 01:15:30,880 --> 01:15:33,050 টিপে সব সত্য, 903 01:15:33,050 --> 01:15:36,670 এবং তারপর উপযুক্ত কল এছাড়াও রয়েছে সত্য. 904 01:15:36,670 --> 01:15:41,510 >> গুড জব! দেখে মনে হচ্ছে আমরা সফলভাবে লিখিত সন্নিবেশ করেছি. 905 01:15:41,510 --> 01:15:47,430 আমরা সকলে এই সপ্তাহে সমস্যা সেট এর জন্য স্পেসিফিকেশন আছে. 906 01:15:47,430 --> 01:15:51,720 এক মজা চ্যালেঞ্জ সম্পর্কে ভাবতে হয় কিভাবে আসলে আপনি যেতে করতে হবে 907 01:15:51,720 --> 01:15:55,340 এবং বিনামূল্যে এই গাছ বিভিন্ন নোডের মধ্যে সমস্ত. 908 01:15:55,340 --> 01:15:58,830 আমরা তাই বিভিন্ন উপায়ে করতে পারেন, 909 01:15:58,830 --> 01:16:01,930 কিন্তু আমি যে আপনি চলে যাবেন আপ পরীক্ষা করা, 910 01:16:01,930 --> 01:16:06,080 এবং মজার একটি চ্যালেঞ্জ হিসাবে, এবং চেষ্টা করে নিশ্চিত করুন যে আপনি কি নিশ্চিত করতে পারবেন না 911 01:16:06,080 --> 01:16:09,490 যে এই Valgrind প্রতিবেদনে ত্রুটি এবং কোন তথ্য ফাঁসের ফেরৎ. 912 01:16:09,490 --> 01:16:12,880 >> গুড লাক এই সপ্তাহে এর Huffman কোডিং সমস্যা সেট, 913 01:16:12,880 --> 01:16:14,380 এবং আমরা আপনাকে দেখতে পরের সপ্তাহে করব! 914 01:16:14,380 --> 01:16:17,290 [CS50.TV]