[Powered by Google Translate] بخش 7: راحت تر]
[راب Bowden] [دانشگاه هاروارد]
[این CS50] [CS50.TV]
بسیار خوب. بنابراین مثل من ایمیل من گفت،
این است که برای رفتن به بخش دودویی درخت فشرده است.
اما این است که بسیاری از سوالات وجود ندارد.
بنابراین ما قصد داریم به تلاش و رسم هر سوال
و به جزئیات دردناک از همه بهترین راه برای انجام کارها است.
بنابراین در آغاز، ما را از طریق نقشه های نمونه ای از درخت های دودویی و چیزهای بروید.
بنابراین در اینجا، "به یاد داشته باشید که یک درخت دودویی گره ها شبیه به کسانی که از یک لیست پیوندی،
به جز به جای آن از یک اشاره گر دو وجود دارد: یکی برای کودک سمت چپ
و یکی برای حق کودک است. "
بنابراین یک درخت دودویی است که درست مثل یک لیست پیوندی،
به جز ساختار به دو اشاره گر.
درختان سه گانه، که در حال رفتن به سه اشاره گر وجود دارد،
N-ARY درختان، وجود دارد که فقط باید یک اشاره گر عمومی
که بعد از آن شما به malloc به اندازه کافی بزرگ را به
اشاره گر به اندازه کافی برای همه کودکان ممکن است.
بنابراین درخت باینری فقط اتفاق می افتد که یک شماره ثابت از دو است.
اگر شما می خواهید، شما می توانید یک لیست پیوندی به عنوان یک درخت یگانی،
اما من فکر نمی کنم هر کسی خواستار آن است که.
"رسم نمودار جعبه و فلش از یک گره در درخت جستجوی دودویی
حاوی شماره مورد علاقه مقابله، 7، که در آن هر کودک اشاره گر تهی است. "
بنابراین iPad در حالت.
>> رفتن به صورت کاملا سر راست است.
ما در حال رفتن به یک گره، من آن را به عنوان یک مربع رسم کنید.
و من از ارزش ها در اینجا جلب کند.
بنابراین ارزش در اینجا،
و سپس در اینجا ما می خواهیم اشاره گر چپ در سمت چپ و اشاره گر راست در سمت راست داشته باشد.
و آن را بسیار بسیار، بنابراین کنوانسیون آن را به چپ و راست، نام اشاره گر است.
هر دو از این رفتن به تهی.
این تنها تهی می شود، و این فقط null خواهد بود.
باشه. پس به اینجا عقب.
"با لیست پیوندی، ما فقط تا به حال به یک اشاره گر ذخیره
به اولین گره در لیست به منظور به یاد داشته باشید کل مرتبط با لیست و فهرست کامل است.
به همین ترتیب، با درختان، ما فقط باید برای ذخیره یک اشاره گر
به یک گره تنها به منظور به یاد داشته باشید تمام درخت.
این گره calle 'ریشه' درخت.
بر نمودار خود را قبل از ساخت و یا قرعه کشی یک
به طوری که شما باید تصویر جعبه و فلش از یک درخت دودویی
با ارزش 7 و سپس 3 و در سمت چپ،
پس از آن 9 در سمت راست، و پس از آن 6 در سمت راست از 3 است. "
بیایید ببینید اگر من می توانم تمام آن در سر من به یاد داشته باشید.
پس این است که برای رفتن به ریشه ما تا اینجا.
خواهیم برخی از اشاره گر را در جایی داشته باشند، و این چیزی است که خواهیم ریشه تماس،
و آن را با اشاره به این پسر.
در حال حاضر به یک گره جدید
چه چیزی ما را داشته باشد، 3 در سمت چپ است؟
بنابراین یک گره جدید با 3 است، و آن را در ابتدا اشاره تهی.
من فقط N. قرار داده است
حالا ما می خواهیم را که رفتن به سمت چپ 7.
پس این اشاره گر را تغییر داد به حال به این پسر.
و ما همین کار را بکنند. ما می خواهیم 9 در اینجا
که در ابتدا فقط تهی می گوید.
ما در حال رفتن به تغییر این اشاره گر، نقطه تا 9،
و در حال حاضر ما می خواهم برای قرار دادن 6 به حق 3.
پس از آن رفتن به - از 6.
و این مرد وجود دارد نقطه.
باشه. به طوری که همه از ما می خواهد را انجام دهد.
>> در حال حاضر به بیش از بعضی از اصطلاحات.
ما در حال حاضر در مورد چگونگی ریشه از درخت بالا ترین گره در درخت است صحبت کردیم.
شامل 7. گره در پایین درخت برگ نامیده می شوند.
هر گره که فقط آن را به عنوان فرزندان آن تهی است، یک برگ است.
پس از آن امکان پذیر است، اگر درخت باینری ما این است که فقط یک گره،
که یک درخت یک برگ است، و این از آن است.
"" ارتفاع درخت تعدادی از گره شما را
از بالا به یک برگ است. "
خواهیم به دریافت، در یک ثانیه، تفاوت
بین درخت دودویی متعادل و نامتعادل،
اما در حال حاضر، ارتفاع این درخت
من می خواهم بگویم 3 است، هر چند اگر شما تعداد دفعات مشاهده تعدادی از گره
شما باید به منظور رسیدن به 9، سپس آن را واقعا فقط یک ارتفاع 2.
در حال حاضر این درخت دودویی نامتعادل است،
اما ما در مورد متعادل زمانی که آن را می شود می شود مربوط است.
بنابراین در حال حاضر ما می توانیم در مورد گره ها در یک درخت در شرایط صحبت کنید
نسبت به سایر گره در درخت است.
بنابراین در حال حاضر ما به پدر و مادر، فرزندان، خواهران و برادران، اجداد و فرزندان است.
آنها حس بسیار رایج است، آنها چیست.
اگر ما بخواهید - پدر و مادر آن است.
پس چه شده است پدر و مادر، از مجموع 3
[دانش آموزان] 7. >> آره. پدر و مادر فقط رفتن به چه نکاتی به شما.
پس چه هستند کودکان از 7 است؟
[دانش آموزان] 3 و 9. >> آره.
توجه داشته باشید که "کودکان" به معنای واقعی کلمه به معنی کودکان،
تا 6 اعمال می شود، به دلیل آن را مانند یک نوه است.
اما پس از آن اگر ما به فرزندان، پس چه فرزندان از 7؟
[دانش آموزان] 3، 6 و 9. >> آره.
فرزندان گره ریشه است برای رفتن به همه چیز را در درخت،
به جز شاید گره ریشه خود را، اگر شما نمی خواهید که یک نسل را به در نظر بگیرند.
و در نهایت، اجداد، به طوری که آن را به جهت مخالف است.
پس چه هستند اجداد از 6؟
[دانش آموزان] 3 و 7. >> آره. 9 شامل نمی شود.
این فقط پشت دودمان مستقیم به ریشه
رفتن به نیاکان شما.
>> "ما می گویند که یک درخت دودویی است" دستور داد: «اگر برای هر گره در درخت،
همه از فرزندان خود را در سمت چپ دارای ارزش کمتر
و همه آنهایی که در سمت راست ارزش بیشتری دارند.
به عنوان مثال، از درخت بالا دستور داده شده است اما این تنها راه ممکن تنظیم دستور داده است. "
قبل از اینکه ما به آن
دستور داد درخت دودویی است که همچنین به عنوان یک درخت جستجوی دودویی شناخته شده است.
در اینجا ما اتفاق می افتد را به خواستار آن دستور داده درخت جستجوی دودویی،
اما من شنیده ام که هرگز آن را به نام درخت دودویی دستور داده قبل از،
و در مسابقه ما هستند احتمال بیشتری برای قرار دادن درخت جستجوی دودویی است.
آنها یکی و همان،
و این مهم است که شما تشخیص تمایز بین درخت و درخت جستجوی دودویی.
درخت جستجوی دودویی یک درخت است که به دو چیز است.
هر گره به دو چیز اشاره.
هیچ استدلال در مورد ارزش هایی که به آن اشاره وجود دارد.
پس مثل اینجا، از آن درخت جستجوی دودویی،
ما می دانیم که اگر ما به از 7 باقی مانده است،
پس از آن همه از ارزش است که ما احتمالا می تواند رسیدن به
با رفتن به سمت چپ از 7 باید کمتر از 7.
توجه کنید که تمام مقادیر کمتر از 7 3 و 6.
اینها همه به سمت چپ 7.
اگر ما به حق از 7، همه چیز را به بالاتر از 7،
بنابراین 9 است که به حق از 7، پس ما خوب است.
این مورد برای یک درخت دودویی است،
برای یک درخت دودویی به طور منظم ما فقط می تواند 3 در بالا، 7 به سمت چپ داشته باشد،
9 به سمت چپ از 7 سفارش از ارزش آنچه وجود دارد می باشد.
در حال حاضر، ما در واقع نمی کنند، این به این دلیل آن را خسته کننده و غیر ضروری،
اما "سعی کنید به عنوان بسیاری را به منظور جلب دستور داد درختان به عنوان شما می توانید از فکر می کنم
با استفاده از 7 اعداد، 3، 9 و 6.
چگونه بسیاری از ترتیبات متمایز وجود دارد؟ ارتفاع هر یک چیست؟
>> خواهیم یک زن و شوهر انجام دهد، اما ایده اصلی این است،
این است که به هیچ وجه به نمایندگی از منحصر به فرد یک درخت دودویی حاوی این مقادیر است.
همه ما نیاز داریم این است که یک درخت دودویی است که شامل 7، 3، 6، و 9.
یکی دیگر ممکن است معتبر خواهد بود 3 ریشه است،
به سمت چپ بروید و آن را به 6، به سمت چپ صفحه بروید و آن را به 7،
به سمت چپ بروید و آن را به 9 است.
این درخت جستجوی دودویی کاملا معتبر است.
این بسیار مفید است، زیرا آن را فقط مانند یک لیست پیوندی
و همه از این اشاره گر ها فقط تهی است.
اما آن را به یک درخت معتبر است. آره؟
[دانشجو] آیا مقادیر باید بیشتر در سمت راست نیست؟
یا این - >> این به معنای به راه دیگر.
نیز وجود دارد - آره، اجازه دهید تغییر دهید که.
9، 7، 6، 3. گرفتن خوب است.
هنوز هم به اطاعت آنچه یک درخت جستجوی دودویی قرار است انجام دهد.
بنابراین همه چیز را به سمت چپ به کمتر از هر گره داده شده است.
ما فقط می تواند حرکت می کند می گویند، این 6 قرار داده و آن را در اینجا.
نه، ما نمی تواند. چرا من را در انجام این کار؟
اجازه دهید - در اینجا 6 است، در اینجا 7، 6 امتیاز 3.
این است که هنوز هم معتبر درخت جستجوی دودویی است.
چه اشتباه است اگر I - اجازه دهید را ببینید اگر من می توانم با آرایش.
بله، درست است. بنابراین چه چیزی اشتباه است با این درخت؟
من حدس می زنم من در حال حاضر با توجه به اشاره است که مشکلی با آن وجود دارد.
چرا من را در انجام این کار؟
باشه. این معقول به نظر می رسد.
اگر ما در هر گره، مانند 7 و سپس به سمت چپ از 7 3 است.
بنابراین ما باید 3، چیزی که به حق از 3 است 6.
و اگر شما در 6 نگاه کنید، چیزی که به حق از 6 به 9 است.
پس چرا این درخت جستجوی دودویی معتبر نیست؟
[دانش آموزان] 9 است که هنوز هم به سمت چپ 7. >> آره.
باید آن را درست است که تمام مقادیر احتمالا شما می توانید با رفتن به سمت چپ از 7 رسیدن آنها کمتر از 7 است.
اگر ما به سمت چپ از 7 به 3 است و ما هنوز هم می تواند تا 6،
ما هنوز هم می تواند تا 9، اما با داشتن رفته کمتر از 7
ما باید قادر باشد که برای رسیدن به یک شماره که بیشتر از 7 است.
پس این درخت جستجوی دودویی معتبر نمی باشد.
>> برادر من در واقع تا به حال یک سوال مصاحبه
بود که اساسا با این کار، فقط کد بالا چیزی است که به اعتبار
آیا یک درخت یک درخت جستجوی دودویی است،
و پس اولین کاری که او انجام داد، فقط چک کنید
اگر در سمت چپ و راست درست است، و سپس تکرار وجود دارد.
اما شما می توانید نه تنها انجام این کار، شما باید برای پیگیری
از این واقعیت که در حال حاضر که من در سمت چپ از 7 رفته،
همه چیز را در این درخت باید کمتر از 7 است.
الگوریتم صحیح نیاز به پیگیری
از مرزهای که ارزش و احتمالا می تواند به سقوط شوید.
ما نمی خواهد رفتن را از طریق تمام از آنها است.
یک رابطه خوب عود وجود دارد،
هر چند که ما به کسانی که بدست، یا ما نمی توانیم به کسانی که،
تعریف چگونه در واقع بسیاری وجود دارد.
بنابراین 14 از آنها وجود دارد.
ایده چگونه شما می توانید آن را انجام دهید ریاضی است، مانند
شما می توانید هر یک را به انتخاب گره ریشه،
و پس از آن اگر من را انتخاب کنید 7 تا گره ریشه،
پس از آن، می گویند، وجود دارد برخی از اعداد است که می تواند به گره سمت چپ من،
و برخی از اعداد است که می تواند گره راست من وجود دارد،
اما اگر من نفر تعداد کل، پس از آن مقدار است که می تواند به سمت چپ بروید
به علاوه مقدار است که می تواند به سمت راست بروید N - 1.
بنابراین از اعداد باقی مانده، آنها باید قادر به رفتن یا به سمت چپ و یا سمت راست.
مشکل به نظر می رسد که اگر من قرار دادن 3 نخست پس از آن همه چیز برای رفتن به سمت چپ،
اما اگر من قرار 7، پس از آن برخی از چیزهایی را می توانید در سمت چپ بروید و برخی از چیزهایی که می تواند به سمت راست بروید.
و با '3 اول من به معنای همه چیز را می تواند به سمت راست بروید.
این در واقع، شما فقط باید در مورد آن فکر می کنم،
چگونه بسیاری از چیزهای را می توان در سطح بعدی درخت بروید.
و از آن بیرون می آید به 14 و یا شما می توانید از آنها قرعه کشی،
و سپس شما 14 دریافت کنید.
>> رفتن به اینجا،
"درخت دودویی مرتب سرد است چرا که ما می توانیم از طریق آنها جستجو
در راه که بسیار شبیه به بیش از یک آرایه مرتب شده است.
برای انجام این کار، ما را در ریشه شروع و کار راه خود را به پایین درخت
نسبت به برگ، چک کردن ارزش در برابر ارزش های ما در حال جستجو برای هر گره است.
اگر مقدار گره فعلی را کمتر از ارزش ما به دنبال،
شما به فرزند راست گره بعدی بروید.
در غیر این صورت، شما به فرزند چپ گره بروید.
در برخی موارد، شما می خواهید ارزش است که شما به دنبال آن هستید، پیدا کردن و یا شما را به تهی اجرا شود،
نشان می دهد ارزش در درخت نیست. "
من به redraw درخت ما تا به حال قبل از، است که می خواهید یک دوم.
اما ما می خواهیم به نگاه کردن آیا 6، 10، و (1) در درخت هستند.
بنابراین، آنچه در آن بود، 7، 9، 3، 6. باشه.
شما می خواهید به نگاه کردن، ما می خواهیم به نگاه تا 6.
چگونه این کار الگوریتم؟
خب، ما نیز به برخی از اشاره گر ریشه به درخت ما را داشته باشد.
و ما را به ریشه بروید و می گویند، این مقدار برابر با ارزش است که ما در حال جستجو برای است؟
بنابراین ما به دنبال به مدت 6، پس از آن برابر نیست.
بنابراین ما نگه داشتن رفتن، و در حال حاضر ما می گویند، درست است، به طوری که 6 از 7 کمتر است.
کند که ما می خواهیم برای رفتن به سمت چپ، و یا اینکه ما می خواهیم برای رفتن به سمت راست؟
[دانشجو] باقی مانده است. >> آره.
این کار به میزان قابل توجهی ساده تر، همه شما باید انجام دهید این است که قرعه کشی یک گره از درخت
و سپس شما می don't - به جای تلاش برای در سر خود فکر می کنم،
خوب، اگر آن را کمتر می توانم به سمت چپ بروید و یا رفتن به سمت راست،
تنها با نگاه کردن به این تصویر، آن را بسیار روشن است که من باید برای رفتن به سمت چپ
اگر این گره بیشتر از ارزش است که من به دنبال.
بنابراین شما را به سمت چپ بروید، در حال حاضر من در 3 هستم.
من می خواهم 3 - کمتر از ارزش من به دنبال، که 6 است.
بنابراین ما به سمت راست بروید، و در حال حاضر من در نهایت در 6،
که ارزش من به دنبال، بنابراین بازگشت من درست است.
ارزش من قصد دارم به دنبال 10 است.
باشه. پس 10، در حال حاضر، در حال رفتن به - قطع که - رفتن به دنبال ریشه است.
در حال حاضر، 10 رفتن به بیشتر از 7، بنابراین من می خواهم به نگاه به سمت راست.
من قصد دارم در اینجا، 10 رفتن به بزرگتر از 9،
بنابراین من می خواهم به نگاه به سمت راست.
آمده ام اینجا، اما در اینجا در حال حاضر من در تهی هستم.
چه کار کنم اگر من ضربه تهی؟
[دانشجو] [بازگشت غلط؟ >> آره. من 10 پیدا کند.
(1) برای رفتن به یک مورد تقریبا یکسان است،
به جز آن رفتن به بدبختانه، به جای به دنبال
پایین سمت راست، من قصد دارم به نگاه کردن به سمت چپ است.
>> حالا من فکر می کنم ما در واقع به کد.
در اینجا این است که در آن - باز کردن دستگاه CS50 و حرکت به راه خود را وجود دارد،
اما شما همچنین می توانید فقط آن را در فضا است.
این احتمالا به ایده آل برای آن را در فضا انجام دهد،
زیرا ما می توانیم در فضای کار می کنند.
"در ابتدا ما می خواهیم یک تعریف جدید برای یک گره درخت باینری حاوی مقادیر نوع int نیاز دارند.
با استفاده از boilerplate typedef زیر،
ایجاد یک تعریف جدید برای یک گره در درخت جستجوی دودویی.
اگر شما گیر کرده است. است. است. "اه، اه، اه، باشه.
پس اجازه قرار دادن boilerplate اینجا،
typedef ساختار گره و گره. بله، درست است.
پس چه زمینه ما در حال رفتن به در گره می خواهید؟
[دانشجو] بین المللی و سپس دو اشاره گر؟
>> بین المللی ارزش، دو اشاره گر؟ چگونه می توانم اشاره گر را من می نویسم؟
[دانشجو] ساختار. >> من باید زوم شوید. آره، تا گره در ساختار * سمت چپ،
و ساختار گره * درست است.
و به یاد داشته باشید بحث از زمان گذشته،
که این باعث می شود که احساس، این را می سازد هیچ حس،
این باعث می شود حس.
شما نیاز به همه چیز وجود دارد به منظور تعیین این ساختار بازگشتی.
خوب، به طوری که این چیزی است که درخت ما این است که به شبیه.
اگر ما درخت سه تایی، سپس یک گره ممکن است مانند B1، B2، ساختار گره * B3 نگاه کنید،
که در آن B است شاخه ای - در واقع، من بیشتر آن را شنیده سمت چپ، وسط، راست، اما هر چه.
ما فقط در مورد باینری مراقبت، راست، چپ.
"در حال حاضر جهانی متغیر * گره ریشه درخت را اعلام کنند."
بنابراین ما قصد داریم برای انجام این کار است.
به منظور تا همه چیز را کمی سخت تر و عمومی تر،
ما یک متغیر جهانی گره را ندارد.
در عوض، در اصلی ما خواهد همه چیز گره ما اعلام
و این بدان معناست که در زیر آمده است، هنگامی که ما شروع به در حال اجرا
عملکرد ما شامل و تابع قرار دادن ما،
به جای آن حاوی ما فقط تابع را با استفاده از این متغیر جهانی گره،
ما قصد داریم به عنوان یک استدلال به آن درخت را که ما می خواهیم آن را به پردازش.
داشتن متغیر جهانی قرار بود تا همه چیز را آسان تر شده است.
ما قصد داریم تا همه چیز سخت تر است.
در حال حاضر یک دقیقه یا بیشتر به این نوع از چیزی که به انجام درست کنند،
که در آن به داخل اصلی شما می خواهید برای ایجاد این درخت، و این که همه شما می خواهید به انجام.
سعی کنید و این درخت در عملکرد اصلی خود را ساخت.
>> باشه. بنابراین شما حتی نمی باید به درخت ساخته اند راه تمام نشده است.
اما هر کسی چیزی است که من می تواند بالا بکشد
تا نشان دهد که چگونه ممکن است شروع به ساختن چنین یک درخت؟
[دانشجو] زدن کسی، تلاش کرد تا خود را رها کند.
[Bowden] هر کس راحت با ساخت درخت خود را؟
[دانشجو] مطمئنا. آن را انجام نداده است. >> این خوب است. ما فقط می تواند به پایان برسد -
آه، می توانید آن را ذخیره کنید؟ آفرین.
بنابراین در اینجا ما - آه، من کمی قطع.
من در بزرگنمایی؟
بزرگنمایی، حرکت کردن. >> من یک سوال. >> آره؟
[دانشجو] وقتی ساختار تعریف می کنید، چیزهایی مثل مقدار دهی اولیه به هر چیزی؟
[Bowden] شماره >> خوب است. بنابراین شما می توانید به مقداردهی اولیه -
[Bowden] شماره هنگامی که تعریف می کنید، و یا زمانی که شما اعلام ساختار،
از آن است که به طور پیش فرض مقدار دهی اولیه، آن را فقط دوست دارم اگر از نوع int به شما اعلام شده است.
این دقیقا همان چیزی است. مانند هر یک از زمینه های فردی خود را
می توانید یک مقدار زباله را در آن داشته باشد. >> و ممکن است برای تعریف - و یا به اعلام یک ساختار
در یک راه است که آن را نشانی از آنها را مقداردهی اولیه؟
[Bowden] بله. بنابراین، میانبر نحو دهی اولیه
رفتن به شبیه -
دو راه وجود دارد ما می توانیم این کار را انجام دهند. من فکر می کنم ما باید آن را کامپایل
را به مطمئن شوید که صدای جرنگ جرنگ می کند این است.
منظور از استدلال است که می آید در ساختار،
شما به عنوان منظور از استدلال در داخل این آکولاد قرار داده است.
بنابراین اگر شما می خواهید آن را مقداردهی اولیه به 9 سمت چپ و تهی و سپس راست تهی باشد،
این امر می تواند 9، پوچ، پوچ است.
جایگزین است، و سردبیر این نحو را دوست ندارد،
و آن فکر می کند من می خواهم یک بلوک جدید،
اما جایگزین چیزی شبیه -
در اینجا، من آن را در یک خط جدید قرار داده است.
شما به صراحت می توان گفت، من را فراموش کرده ام نحو دقیق است.
بنابراین شما به صراحت می توانید آنها را با نام و نام خانوادگی آدرس، و می گویند،
ج. ارزش = 9 = NULL چپ.
من حدس می زنم این نیاز به کاما از هم است.
راست = NULL، بنابراین در این روش شما انجام نمی
در واقع نیاز به دانستن منظور از ساختار،
و هنگامی که شما در حال خواندن این کار، آن را به مراتب صریح تر
در مورد آنچه که ارزش به مقداردهی اولیه به.
>> این اتفاق می افتد به عنوان یکی از چیزهایی که -
بنابراین، برای بیشتر قسمت ها، C + + superset از C.
شما نمی توانید کدهای C، حرکت آن را به C + +، و آن را باید کامپایل.
این یکی از چیزهایی است که C + + را پشتیبانی نمی کند، بنابراین مردم تمایل به آن را انجام دهد.
من نمی دانم در صورتی که تنها به این دلیل که مردم تمایل به آن را انجام دهد،
اما در مورد جایی که من نیاز به استفاده از آن نیاز به کار با C + + و بنابراین من می تواند این استفاده نمی کند.
یک مثال دیگر از چیزی است که با C + + کار نمی کند
چگونه malloc "* خالی را بر می گرداند، مشخصات فنی،
اما شما فقط می تواند کاراکتر * x = malloc هر آنچه که می گویند،
و آن را به طور خودکار به * کاراکتر ریخته شده است.
آن به سایر نظرسنجی ها به صورت خودکار اتفاق نمی افتد در C + +.
که نمی خواهد کامپایل، و شما به صراحت نیاز به گفتن
* کاراکتر، malloc، حالا هر چی، به آن بازیگران * کاراکتر.
بسیاری از چیزهایی هستند که C و C + + در مخالفت وجود ندارد،
اما آن دو است.
بنابراین ما با این نحو بروید.
اما حتی اگر ما با آن نحو از رفتن نیست،
است - ممکن است با این اشتباه است؟
[دانشجو] من لازم نیست به dereference آن؟ >> آره.
به یاد داشته باشید که فلش dereference ضمنی،
و تا زمانی که ما فقط با یک ساختار خرید و فروش،
ما مایل به استفاده از. در داخل میدان از ساختار.
و تنها زمانی ما با استفاده از فلش زمانی است که ما می خواهیم انجام دهیم -
خوب، فلش معادل است -
این چیزی است که آن را به معنای اگر من با استفاده از فلش است.
همه به معنی پیکان، dereference این، در حال حاضر من در یک ساختار هستم، و من می توانم این زمینه دریافت کنید.
در هر دو زمینه به طور مستقیم و یا dereference و این زمینه را دریافت کنید -
من حدس می زنم این باید ارزش.
اما در اینجا من خرید و فروش تنها با یک ساختار، یک اشاره گر به ساختار
و بنابراین من می توانید از فلش استفاده نمی کند.
اما این نوع از چیزی که ما می توانیم برای تمام گره ها انجام دهد.
اوه خدای من.
این 6، 7، و 3 است.
پس ما می توانیم راه اندازی شاخه در درخت ما، ما می توانیم 7 -
ما می توانیم در سمت چپ آن باید تا 3.
پس ما چگونه انجام این کار؟
[دانش آموزان، ناخوانا] >> آره. این آدرس از node3،
و اگر شما آدرس ندارد، و سپس آن را نه تنها می کامپایل.
اما به یاد داشته باشید که این اشاره گر به گره بعدی.
حق باید تا 9،
و 3 باید در سمت راست به 6 نقطه.
من فکر می کنم این است که همه مجموعه است. هر گونه نظر و یا سوال؟
[دانشجو، ناخوانا] ریشه در حال رفتن بود 7.
ما فقط می تواند گره می گویند * PTR =
و یا ریشه، = node7.
>> برای اهداف ما، ما در حال رفتن به خرید و فروش با درج
بنابراین ما در حال رفتن به یک تابع برای وارد کردن به این درخت دودویی برای نوشتن
و درج ناچار به تماس malloc یک گره جدید برای این درخت برای ایجاد.
بنابراین همه چیز کثیف با این واقعیت است که بعضی از گره ها
در حال حاضر بر روی پشته
و گره های دیگر می رویم برای پایان دادن به پشته هنگامی که آنها را وارد.
این کاملا معتبر است، اما تنها به این دلیل
ما قادر به انجام این کار را بر روی پشته
به دلیل آن را مانند یک مثال ساختگی است که ما می دانیم
درخت قرار است به عنوان 7، 3، 6، 9 ساخته شده است.
اگر ما این را نداشته باشند، پس ما نمی خواهد به malloc در وهله اول.
همانطور که خواهیم دید و کمی بعد، ما باید malloc'ing.
در حال حاضر آن را کاملا معقول و منطقی را بر روی پشته قرار داده است،
اما اجازه دهید را تغییر دهید این برای پیاده سازی malloc.
بنابراین هر یک از این است که در حال حاضر چیزی شبیه به رفتن به
گره * node9 = malloc (sizeof (گره)).
و در حال حاضر ما در حال رفتن به چک ما را به انجام.
اگر (node9 == NULL) - من که می خواهند -
بازگشت 1، و پس از آن ما می توانیم node9> چرا که در حال حاضر آن را در یک اشاره گر،
ارزش = 6، node9-> سمت چپ = NULL،
node9-> حق = NULL،
و ما قصد داریم که باید به انجام این کار برای هر یک از کسانی که گره.
بنابراین به جای آن، اجازه دهید آن را قرار داده و در داخل یک تابع جداگانه.
اجازه دهید آن گره * build_node،
و این تا حدودی شبیه به رابط های برنامه کاربردی که برای کدگذاری هافمن ارائه است.
ما به شما توابع برنامه initializer را برای یک درخت
deconstructor "از توابع" برای آن دسته از درختان و همین کار را برای جنگل.
>> بنابراین در اینجا ما در حال رفتن به یک تابع initializer از
فقط به ساخت یک گره را برای ما است.
و آن را به نگاه دقیقا مانند این بسیار است.
و من حتی به تنبل و تغییر نام متغیر نیست،
حتی اگر node9 می سازد هیچ حس دیگر.
آه، من حدس می زنم ارزش node9 نباید است 6.
در حال حاضر ما می توانیم node9 بازگشت.
و در اینجا ما باید بازگشتی NULL است.
هر کس در آن تابع ساخت گره موافق هستید؟
بنابراین در حال حاضر ما فقط می تواند که برای ساخت هر گره با مقدار داده می شود و اشاره گر تهی تماس بگیرید.
در حال حاضر ما می توانیم که تماس بگیرید، ما می توانیم گره * node9 = build_node (9) را انجام دهد.
و اجازه دهید. است. است.
6، 3، 7، 6، 3، 7.
و در حال حاضر ما می خواهم به راه اندازی همان اشاره گر،
جز در حال حاضر همه چیز در حال حاضر در شرایط استفاده از اشاره گرها
بنابراین دیگر نیازی به آدرس.
باشه. پس چیزی که من می خواهم به انجام این کار؟
چک کردن خطا که من انجام نمی وجود دارد.
چه بازگشت گره؟
[دانشجو، ناخوانا] >> آره. اگر malloc شکست خورد، آن را بر می گردیم تهی.
بنابراین من قصد دارم به lazily آن را در اینجا به جای انجام یک شرط برای هر.
اگر (node9 == NULL، و یا - حتی ساده تر،
این معادل فقط اگر node9 نیست.
پس اگر نه node9، یا نه node6، یا نه node3، یا نه node7 بازگشت 1.
شاید ما باید چاپ malloc شکست خورده، و یا چیزی.
[دانشجو] نادرست است برابر با null به عنوان؟
[Bowden] هر مقدار صفر غلط است.
تهی مقدار صفر است.
صفر صفر است. غلط مقدار صفر است.
هر - زیبا 2 تنها مقادیر صفر پوچ و صفر،
غلط است فقط مخلوط به عنوان صفر تعریف شده است.
که همچنین شامل اگر ما اعلام متغیر جهانی است.
اگر ما گره ریشه * در اینجا،
پس از آن - چیز خوب در مورد متغیر های جهانی این است که آنها همیشه یک مقدار اولیه است.
که از توابع درست نیست، چه در داخل از اینجا،
اگر ما، مانند، * گره یا گره X.
ما هیچ ایده چه چیزی x.value، x.whatever،
یا ما می توانیم به آنها و چاپ آنها می تواند خودسرانه باشد.
که از متغیرهای جهانی درست نیست.
بنابراین گره ریشه یا گره X.
به طور پیش فرض، همه چیز جهانی، اگر نه به صراحت به برخی از ارزش دهی اولیه
مقدار صفر را به عنوان ارزش خود را دارد.
بنابراین در اینجا، گره ریشه *، ما به صراحت و نه آن را مقداردهی اولیه به هر چیزی،
بنابراین مقدار پیش فرض آن null خواهد بود، که مقدار صفر از اشاره گر است.
مقدار پیش فرض X به این معنی است که x.value صفر است،
x.left تهی است، و x.right تهی است.
پس از آن است که ساختار، همه زمینه های ساختار، صفر خواهد بود ارزش.
ما لازم نیست برای استفاده از آن در اینجا، هر چند.
[دانشجو] ساختمانها متفاوت هستند نسبت به سایر متغیرها و متغیرهای دیگر
ارزش زباله، این صفر؟
[Bowden] دیگر مقادیر بیش از حد. بنابراین در X، X صفر خواهد بود.
اگر آن را در حوزه جهانی است، آن را تا مقدار اولیه است. >> درست است.
[Bowden] در هر صورت مقدار اولیه به شما داد آن را یا صفر است.
من فکر می کنم که طول می کشد مراقبت از همه از این است.
>> باشه. بنابراین بخش بعدی از این سوال می پرسد،
"در حال حاضر ما می خواهیم برای نوشتن یک تابع نامیده می شود شامل
با یک نمونه اولیه از بولی شامل مقدار int است. "
ما قصد نداریم به انجام بولی حاوی مقدار از نوع int است.
نمونه اولیه ما این است که رفتن به شبیه
بولی شامل (مقدار از نوع int است.
و پس از آن ما در حال رفتن به آن درخت عبور
که باید آن را چک تا ببینید که آیا آن است که ارزش است.
بنابراین گره * درخت). باشه.
و پس از آن ما می توانیم آن را با چیزی شبیه تماس بگیرید.
شاید ما باید برای printf و یا چیزی را می خواهم.
شامل 6، ریشه ما است.
که باید یکی، یا به راست،
در حالی که شامل 5 ریشه باید بازگشت نادرست است.
بنابراین یک ثانیه برای انجام این کار کنند.
شما می توانید آن را به صورت تکرار شونده و یا به صورت بازگشتی انجام دهد.
چیز خوب در مورد راه ایم تا چیز این است که
آن را به خود آشنایی به راه حل بازگشتی ما بسیار آسان تر
از راه جهانی متغیر بود.
چرا که اگر ما فقط باید حاوی مقدار از نوع int است، پس ما باید هیچ راهی از recursing پایین subtrees.
ما می خواهیم یک تابع کمکی جداگانه که recurses از subtrees برای ما به.
اما از آنجایی که ما تغییر داده اید آن را به درخت به عنوان یک استدلال،
که آن را باید همیشه در وهله اول بوده است.
در حال حاضر ما می توانیم RECURSE آسان تر.
بنابراین تکرار شونده و یا بازگشتی، ما بیش از هر دو،
اما ما به پایان می رسد بازگشتی بودن بسیار آسان را ببینید.
باشه. آیا کسی چیزی است که ما می توانیم با آن کار کنند؟
>> [دانشجو] من تکرار شونده راه حل است. >> همه حق است، تکرار می شوند.
خوب، این به نظر می رسد خوب است.
بنابراین، می خواهند به ما راه رفتن را از طریق آن؟
[دانشجو] مطمئنا. بنابراین من یک متغیر موقت به اولین گره از درخت است.
و بعد من فقط از طریق در حالی که دما تهی برابر نیست لوپ،
بنابراین در حالی که هنوز در درخت بود، من حدس می زنم.
و اگر این مقدار برابر با ارزش است که موقت است با اشاره به
سپس آن را که ارزش را بر می گرداند.
در غیر این صورت، آن را چک می کند اگر آن را در سمت راست یا سمت چپ است.
اگر شما تا کنون یک وضعیت که در آن هیچ درخت بیشتر وجود دارد،
سپس آن را برمی گرداند - خروج از حلقه و نادرست را برمی گرداند.
[Bowden] باشه. به طوری که به نظر می رسد خوب است.
هر کسی هر گونه نظر در مورد هر چیزی؟
من نظری نداده اند صحت در همه.
چیزی که ما می توانیم انجام دهیم، این پسر است.
آه، آن رفتن به دراز کمی.
من که تا حل کنند. باشه.
>> هر کس باید به یاد داشته باشید که چگونه سه تایی کار می کند.
قطعا وجود داشته است آزمونها در گذشته
که شما یک تابع را با استفاده از عملگر سه تایی را،
و می گویند، ترجمه، انجام کاری می کند که سه تایی استفاده نمی.
بنابراین این یک مورد بسیار معمول است زمانی که من فکر می کنم به استفاده از سه تایی،
جایی که اگر برخی از شرایط تعیین یک متغیر را به چیزی،
دیگری که متغیر به چیز دیگری تنظیم شده است.
این چیزی است که اغلب می توان به این نوع از چیزی تبدیل
که در آن مجموعه ای که متغیر به این - یا خوب است، این درست است؟ سپس این دیگری این است.
[دانشجو] یکی از اولین، اگر درست باشد، درست است؟
[Bowden] آره. من همیشه آن را بخوانید، دمای برابر است با مقدار بیشتر از مقدار موقت،
پس از این، به دیگری این است. پرسیدن یک سوال است.
آیا این بیشتر؟ اولین چیزی که پس از آن انجام دهد. چیز دیگری را انجام دهد.
من تقریبا همیشه - روده بزرگ، من فقط - در سر من، من به عنوان خوانده شده دیگری است.
>> آیا کسی که یک راه حل بازگشتی؟
باشه. این یکی که ما در حال رفتن به - آن را در حال حاضر می تواند بزرگ باشد،
اما ما در حال رفتن به آن را حتی بهتر.
این خیلی ایده یکسان است.
این فقط، به خوبی، آیا شما می خواهید به توضیح؟
[دانشجو] مطمئنا. بنابراین ما در حال مطمئن شوید که درخت پوچ است اولین بار نیست،
زیرا اگر درخت تهی است و سپس آن را به بازگشت به غلط چون ما آن را یافت نشد.
و اگر هنوز هم وجود دارد یک درخت، ما را به - ما برای اولین بار چک کنید اگر مقدار گره فعلی.
بازگشت واقعی آن است، و اگر نه ما در سمت چپ یا راست RECURSE.
کند که صدا مناسب است؟ >> MM-HMM. (توافقنامه)
به طوری که این است که تقریبا متوجه - ساختاری بسیار شبیه به راه حل تکرار شونده است.
این درست است که به جای recursing، ما تا به حال یک حلقه در حالی که.
و در مورد پایه در اینجا که در آن درخت تهی برابر نیست
که تحت آن شرایط ما از حلقه در حالی که شکست بود.
آنها بسیار مشابه است. اما ما در حال رفتن به یک مرحله دیگر است.
در حال حاضر، ما همان چیزی که در اینجا.
توجه داشته باشید که ما در حال بازگشت به همان چیزی که در هر دو این خطوط،
به جز یک استدلال متفاوت است.
بنابراین ما در حال رفتن را که به یک سه گانه است.
من ضربه چیزی گزینه، و یک نماد آن ساخته شده است. باشه.
بنابراین ما قصد داریم به بازگشت که شامل.
این است که به چند خط، به خوبی، به بزرگنمایی در آن است.
معمولا، به عنوان یک چیز سبکی، من بسیاری از مردم فکر نمی کنم
قرار دادن یک فضای بعد از فلش است، اما من حدس می زنم اگر شما سازگار باشد، خوب است.
اگر مقدار کمتر از ارزش درخت است، ما می خواهیم به RECURSE در سمت چپ درخت،
دیگری ما را به RECURSE در سمت راست درخت می خواهم.
به طوری که گام اول ساخت این نگاه کوچکتر بود.
گام دوم این نگاه کوچکتر -
ما می توانیم این را به چند خط از هم جدا کنید.
باشه. مرحله دو و آن را نگاه کوچکتر است که در اینجا،
بنابراین مقدار بازگشتی برابر با ارزش درخت، و یا شامل هر چیز دیگری است.
>> این یک نکته مهم است.
من مطمئن نیستم که او گفت که آن را در کلاس به صراحت،
اما آن را ارزیابی کوتاه مدار نامیده می شود.
این ایده در اینجا ارزش است == ارزش درخت.
در صورتی که درست است، پس این درست است، و ما می خواهیم به "یا" که با آنچه در اینجا.
بدون حتی فکر کردن در مورد آنچه در اینجا،
تمام بیان رفتن به بازگشت چه چیزی است؟
[دانش آموز] درست است؟ >> آره، چرا که درست از هر چیز،
or'd - or'd یا واقعی با هر چیزی لزوما درست است.
تا به زودی به عنوان مقدار بازگشتی = ارزش درخت،
ما فقط رفتن به بازگشت واقعی است.
حتی رفتن به RECURSE بیشتر شامل پایین خط.
ما می توانیم این مرحله را بیشتر.
درخت بازگشت تهی برابر و همه از این نیست.
آن ساخته شده آن را یک تابع یک خط.
این هم یک نمونه از مدار کوتاه ارزیابی است.
اما در حال حاضر از آن همان ایده -
به جای - بنابراین اگر درخت برابر تهی نیست - و یا، به خوبی،
اگر درخت تهی مساوی، که مورد بد است،
اگر درخت برابر تهی است، پس از آن اولین شرط رفتن نادرست می شود.
غلط anded با هر چیزی است برای رفتن به چه؟
[دانشجو] غلط است. >> آره. این نیمه دیگر ارزیابی مدار کوتاه است،
جایی که اگر درخت تهی برابر نیست، پس از آن ما می رویم حتی -
یا اگر درخت تهی برابر است، پس از آن ما می رویم نه به ارزش ارزش == درخت.
ما فقط رفتن به برگرداندن غلط است.
که مهم است، چرا که اگر آن را انجام ارزیابی نیست اتصال کوتاه،
پس از آن اگر درخت تهی مساوی، این شرط دوم این است که رفتن به گسل SEG،
چون درخت> ارزش غیر مرجع تهی.
به طوری که که. آیا می توانید این را - یک بار بیش از تغییر.
این یک چیزی که بسیار شایع است، ساخت این خط یکی با این،
اما این یک چیز مشترک در شرایط، شاید حق در اینجا،
اما اگر (درخت! = NULL، و درخت> ارزش ارزش ==)، انجام هر کاری است.
این یک وضعیت بسیار شایع است، که در آن به جای داشتن
برای شکستن این به دو IFS، جایی که دوست دارید، درخت تهی است؟
خوب، آن تهی نیست، بنابراین در حال حاضر ارزش درخت برابر با ارزش است؟ انجام این کار.
در عوض، این وضعیت، این کار را گسل SEG هرگز
چرا که آن را خواهد شکست اگر این اتفاق می افتد به تهی.
خوب، من حدس می زنم اگر درخت خود را به طور کامل اشاره گر نامعتبر باشد، آن را هنوز هم می تواند SEG گسل،
اما می توان آن را گسل SEG اگر درخت تهی است.
اگر آن تهی بود، آن را قبل از شما تا به حال اشاره گر در وهله اول بصورت غیر مرجع.
[دانشجو] آیا این ارزیابی به اصطلاح تنبل؟
>> [Bowden] ارزیابی کند و آهسته یک چیز جداگانه است.
ارزیابی کند و آهسته است و بیشتر شبیه به شما را برای یک مقدار می پرسند،
شما بخواهید برای محاسبه یک مقدار، نوع، اما شما آن را نیاز ندارد بلافاصله.
بنابراین تا زمانی که شما به آن نیاز دارید، آن را مورد ارزیابی قرار نگرفته است.
این دقیقا همان چیزی نیست، اما در هافمن pset،
آن را می گوید که ما "lazily" نوشتن.
به این دلیل که ما انجام این کار است زیرا ما در واقع بافر نوشتن -
ما نمی خواهیم به نوشتن بیت های فردی در یک زمان،
و یا بایت های فرد در یک زمان، ما به جای می خواهم برای به دست آوردن یک تکه از کلمه در ادامه متن.
هنگامی که یک تکه از بایت، و سپس خواهیم آن را بنویسید.
حتی اگر شما آن را بخواهید برای نوشتن - و fwrite و fread انجام مرتب کردن بر اساس همان چیزی.
می خواند و می نویسد: بافر می کنند.
حتی اگر شما از آنها بخواهید برای نوشتن بلافاصله، آن را احتمالا نخواهد بود.
و شما می توانید مطمئن باشید که همه چیز در حال رفتن به نوشته
تا زمانی که با شما تماس hfclose و یا هر آنچه در آن است،
که پس از آن می گوید: بسیار خوب، من بستن فایل،
این بدان معناست که من بهتر نوشتن همه چیز را من نوشته شده است هنوز رتبهدهی نشده است.
آن را بدون نیاز به نوشتن همه چیز
تا زمانی که شما در حال بسته شدن فایل، و سپس به آن نیاز دارد.
به طوری که فقط آنچه را تنبل - از آن منتظر می ماند تا زمانی آن را به رخ می دهد.
- نگاهی به 51 و شما را به آن را در جزئیات بیشتر بروید
زیرا OCaml و همه چیز در 51، بازگشت همه چیز است.
هیچ راه حل های تکراری، اساسا وجود ندارد.
بازگشت همه چیز، و ارزیابی تنبل
رفتن به مهم برای بسیاری از شرایط
که در آن، اگر شما lazily ارزیابی، به معنای -
به عنوان مثال، رودخانه ها، که بی نهایت طولانی است.
در تئوری، شما می توانید از اعداد طبیعی به عنوان یک جریان 1-2-3-4-5-6-7 فکر می کنم،
تا lazily بررسی قرار گرفت همه چیز خوب است.
اگر من می گویند من می خواهم شماره دهم، و سپس من می توانم ارزیابی تا شماره دهم.
اگر من می خواهم شماره صدم، و سپس من می توانم ارزیابی به شماره صدم.
بدون ارزیابی تنبل، سپس آن را به تلاش برای بررسی تمام اعداد را بلافاصله.
شما در حال ارزیابی بسیاری از اعداد بی نهایت، و این ممکن نیست.
بنابراین بسیاری از شرایط وجود دارد که در آن ارزیابی تنبل
فقط ضروری برای به دست آوردن همه چیز را به کار است.
>> حالا ما می خواهیم به نوشتن را وارد کنید که در آن درج می شود
به همین ترتیب در حال تغییر در تعریف آن است.
بنابراین در حال حاضر آن را درج بولی (ارزش بین المللی).
ما در حال رفتن به تغییر است که برای وارد کردن بولی (هوشمند ارزش، گره درخت *).
ما در واقع رفتن به تغییر آن دوباره در یک بیت، خواهیم دید که چرا.
و اجازه حرکت build_node، فقط برای heck از آن،
بنابراین ما لازم نیست که یک نمونه تابع به نوشتن درج کنید.
که اشاره به این است که شما در حال رفتن به استفاده از build_node در درج.
باشه. نگاهی از یک دقیقه برای آن.
من فکر می کنم که من را نجات داد تجدید نظر اگر شما می خواهید از آن بکشد،
و یا، حداقل، من در حال حاضر.
من می خواستم استراحت کمی به فکر می کنم در مورد منطق قرار دادن،
اگر شما نمی توانید از آن فکر می کنم.
در واقع، شما فقط تا به حال قرار دادن در برگ است.
مانند، اگر من وارد 1، پس از آن من به ناچار از رفتن به می شود قرار دادن 1 -
من به سیاه و سفید تغییر دهید - I'll قرار دادن 1 در اینجا.
یا اگر من وارد 4، من می خواهم به قرار دادن 4 در اینجا.
بنابراین بدون توجه به آنچه شما انجام دهد، شما در حال رفتن به قرار دادن در یک برگ.
همه شما باید انجام دهید این است که تکرار پایین درخت تا زمانی که شما به گره
است که باید به پدر و مادر گره، پدر و مادر گره جدید
و سپس به سمت چپ یا راست خود اشاره گر، بسته به اینکه آیا تغییر
آن را بزرگتر یا کمتر از گره فعلی است.
تغییری که اشاره گر به اشاره به گره جدید خود را.
بنابراین تکرار درخت، نقطه برگ را به گره جدید است.
همچنین در مورد اینکه چرا این نوع وضعیت را ممنوع قبل از فکر می کنم،
جایی که من درخت دودویی است که در آن ساخته شده آن درست بود
اگر شما تنها در تنها یک گره نگاه کرد،
اما 9 بود به سمت چپ از 7 اگر شما تکرار کردن تمام راه.
به طوری که غیر ممکن است در این سناریو، از -
فکر می کنم در مورد قرار دادن 9 یا چیزی در گره اول،
من قصد دارم برای دیدن 7 و من فقط برای رفتن به سمت راست.
بنابراین بدون توجه به آنچه که من انجام می دهند، اگر من قرار دادن با رفتن به برگ،
و برگ با استفاده از الگوریتم مناسب،
رفتن به غیر ممکن است برای من برای وارد کردن 9 به سمت چپ از 7
چرا که به زودی به عنوان من ضربه 7 من قصد دارم برای رفتن به سمت راست.
آیا کسی هم چیزی دارند که برای شروع با؟
[دانشجو] من انجام دهد. >> مطمئنا.
[دانشجو، ناخوانا]
[دانشجویی، ناخوانا]
[Bowden] قدردانی است. باشه. می خواهم که توضیح می دهند؟
>> [دانشجو] از آنجا که ما می دانیم که ما در قرار دادن
گره های جدید در پایان از درخت،
من را از طریق درخت لوپ تکرار شونده
تا زمانی که من به یک گره که با اشاره به تهی شدم.
و پس از آن تصمیم گرفتم آن را قرار داده یا در سمت راست یا سمت چپ
با استفاده از این متغیر سمت راست، آن را به من گفت که در آن به آن قرار داده است.
و پس از آن، در اصل، من فقط ساخته شده است که تاریخ و زمان آخرین -
که دما نقطه گره به گره جدید است که آن را ایجاد،
یا در سمت چپ و یا در سمت راست، با توجه به آنچه ارزش بود.
در نهایت، من مجموعه ای از مقدار گره جدید به ارزش تست خود.
[Bowden] خوب، پس یک شماره به من اینجا را ببینید.
این 95٪ از این راه وجود دارد.
خوب، این مسئله است که من می بینم، هر کس دیگری را دیدن موضوع؟
شرایطی که تحت آن آنها شکستن حلقه چیست؟
[دانشجو] اگر دما تهی است؟ >> آره. پس چگونه شما به خارج از حلقه است اگر دما صفر است.
اما آنچه می توانم حق در اینجا؟
من dereference موقت، است که ناگزیر تهی است.
بنابراین چیزی که شما نیاز به انجام پیگیری تا دما تهی است،
شما می خواهید برای پیگیری از پدر و مادر در تمام زمان.
ما همچنین می خواهیم گره پدر *، من حدس می زنم ما می توانیم که در تهی در ابتدا نگه دارید.
این امر به رفتار عجیب و غریب برای ریشه درخت،
اما ما را به آن را دریافت کنید.
اگر مقدار بیشتر از هر چیز دیگری، و سپس دما = حق موقت است.
اما قبل از انجام این کار، پدر و مادر دما =.
یا پدر و مادر همیشه به دما برابر می رود؟ این است که در مورد؟
اگر دما تهی نیست، پس من قصد دارم به پایین حرکت کند، بدون توجه به آنچه.
به یک گره که موقت است پدر و مادر است.
پس پدر و مادر رفتن به دما، و پس از آن من حرکت دما پایین است.
کن دما صفر است، اما پدر و مادر به پدر و مادر از چیزی است که تهی.
تا پایین در اینجا، من نمی خواهم به حق مجموعه ای معادل 1.
بنابراین من به سمت راست نقل مکان کرد، به طوری که اگر درست = 1،
و من حدس می زنم شما می خواهید برای انجام -
اگر شما به سمت چپ حرکت می کند، شما می خواهید به حق مجموعه ای برابر با 0 است.
وگرنه اگر شما همیشه به سمت راست حرکت می کند.
تا حق = 0. اگر درست = 1،
در حال حاضر ما می خواهید را به پدر و مادر newnode اشاره گر راست،
دیگری که ما می خواهیم را به پدر و مادر newnode اشاره گر چپ.
سوالات مطرح شده در آن؟
باشه. بنابراین این راه ما است - خب، در واقع، به جای انجام این کار،
ما 1/2 انتظار می رود شما را به استفاده build_node.
و پس از آن اگر newnode برابر تهی، بازگشت نادرست است.
که که. در حال حاضر، این چیزی است که ما انتظار می رود شما را به انجام است.
>> این همان چیزی است که راه حل های پرسنل می باشد.
من این را به عنوان "حق" راه رفتن در مورد آن اختلاف نظر دارند
اما این کاملا خوب و آن کار خواهد کرد.
یک چیز که حق کمی عجیب و غریب است در حال حاضر است
اگر درخت شروع می شود به عنوان تهی، ما در یک درخت تهی منتقل می کند.
من حدس می زنم آن را در مورد چگونگی رفتار گذرا در یک درخت تهی تعریف می کنید بستگی دارد.
من فکر می کنم که اگر شما در یک درخت تهی می گذرد،
پس از آن قرار دادن این مقدار را به یک درخت تهی
باید فقط بازگشت به یک درخت که در آن ارزش تنها این است که گره تک.
آیا مردم با آن موافق هستید؟ شما می توانید، اگر شما می خواهید،
اگر شما در یک درخت تهی
و شما می خواهید برای قرار دادن یک مقدار به آن بازگشت، نادرست است.
آن تا به شما برای تعریف آن است.
برای انجام این کار اولین چیزی که من گفتم و پس از آن -
خوب، شما در حال رفتن به انجام این کار مشکل است، زیرا
آن ساده تر خواهد بود اگر ما تا به حال یک اشاره گر جهانی به چیزی،
اما ما، نه بنابراین اگر درخت تهی، چیزی نیست که ما می توانیم در مورد آن انجام دهید وجود دارد.
ما فقط می تواند بازگشت کاذب.
بنابراین من قصد دارم برای تغییر را وارد کنید.
ما به لحاظ فنی فقط می تواند این حق در اینجا تغییر دهید،
چگونه آن را تکرار بیش از همه چیز،
اما من قصد دارم برای تغییر درج یک گره به درخت **.
اشاره گر دو برابر شود.
این به چه معنی؟
به جای خرید و فروش با اشاره گر به گره،
چیزی که من قصد دارم به دستکاری این اشاره گر است.
من قصد دارم به دستکاری این اشاره گر است.
من قصد دارم به دستکاری اشاره گر به طور مستقیم.
این را حس می کند از آن زمان، در مورد پایین فکر می کنم -
خوب، در حال حاضر این امتیاز به تهی.
چیزی که من می خواهم به انجام این کار این است که دستکاری این اشاره گر به نقطه تهی نیست.
من می خواهم آن را برای اشاره به گره جدید من.
اگر من فقط آهنگ از اشاره گر به اشاره گر من نگه دارید،
پس از آن من لازم نیست به پیگیری از اشاره گر پدر و مادر است.
من فقط می تواند مسیر برای دیدن در صورتی که اشاره گر با اشاره به تهی،
و در صورتی که اشاره گر با اشاره به تهی،
برای اشاره به گره من می خواهم آن را تغییر دهید.
و من می توانم آن را از من به یک اشاره گر به اشاره گر را تغییر دهید.
اجازه بدهید این حق را در حال حاضر.
شما در واقع می توانید آن را به صورت بازگشتی زیبا به راحتی انجام دهد.
آیا ما می خواهیم به انجام این کار؟
بله، کار می کنیم.
>> اجازه دهید آن را به صورت بازگشتی.
اول، چیزی است که در مورد پایگاه ما خواهد بود؟
تقریبا همیشه مورد پایگاه ما، اما در واقع، این نوع از روی حیله و تزویر است.
اولین چیزهایی اول، اگر (درخت == NULL)
من حدس می زنم ما فقط رفتن به بازگشت غلط است.
این است که از درخت تهی بودن متفاوت است.
این اشاره گر به اشاره گر ریشه خود تهی است
که بدان معنی است که اشاره گر ریشه خود وجود ندارد.
تا پایین در اینجا، اگر من
* گره - اجازه دهید فقط استفاده مجدد از این.
گره ریشه = NULL،
و پس از آن من قصد دارم به تماس قرار دادن با انجام کاری مانند،
درج 4 به و ریشه.
بنابراین و ریشه، اگر ریشه * گره
پس از آن و ریشه است که برای رفتن به ** گره.
این درست است. در این مورد، درخت، تا اینجا،
درخت تهی نیست - و یا قرار دادن.
اینجا. درخت تهی است، درخت * تهی است، که خوب است
چرا که اگر درخت * تهی است، پس از آن من می توانید آن را دستکاری
در حال حاضر به چه من می خواهم آن را به نقطه به نقطه.
اما اگر درخت تهی، این بدان معناست که من فقط پایین آمد و گفت: تهی.
که معنی ندارد. من می تواند هر چیزی را با آن انجام نمی شود.
اگر درخت تهی، بازگشت نادرست است.
بنابراین من اساسا در حال حاضر گفت: آنچه مورد پایگاه ما واقعی است.
و آنچه که خواهد بود؟
[دانشجو، ناخوانا]
[Bowden] بله. بنابراین اگر (* درخت == NULL).
این مربوط به این مورد را در اینجا
اگر اشاره گر قرمز من است که اشاره گر من متمرکز شده است،
بنابراین من در این اشاره گر متمرکز، در حال حاضر من در این اشاره گر متمرکز شده است.
در حال حاضر من در این اشاره گر متمرکز شده است.
بنابراین اگر اشاره گر قرمز من است، که ** گره من،
همیشه - اگر *، اشاره گر قرمز من، همیشه تهی است،
که بدان معنی است که من در مورد جایی که من هستم تمرکز بر روی یک اشاره گر است که نقاط هستم -
این یک اشاره گر است که متعلق به یک برگ است.
من می خواهم برای تغییر این اشاره گر به اشاره به گره جدید است.
دوباره در اینجا.
newnode من فقط گره * N = build_node (ارزش)
پس از آن، N اگر N = NULL، بازگشت نادرست است.
دیگری که ما می خواهیم برای تغییر آنچه را که اشاره گر در حال حاضر به اشاره
در حال حاضر به ما گره تازه ساخته شده.
ما در واقع می تواند که در اینجا انجام دهید.
به جای گفتن N، ما می گوییم * = درخت اگر درخت *.
هر کس بفهمد که؟ که با خرید و فروش با اشاره گر به اشاره گر،
ما می توانیم از اشاره گر تهی به نقطه را به چیزهایی که ما می خواهیم آنها را به نقطه تغییر دهید.
که مورد پایگاه ما است.
>> در حال حاضر عود ما، و یا بازگشت ما،
رفتن به بسیار شبیه به بازگشتی دیگر ما انجام داده ایم.
ما در حال رفتن به خواهید برای وارد کردن ارزش،
و در حال حاضر من قصد استفاده از سه تایی دوباره، اما وضعیت ما خواهد بود؟
آن چه ما به دنبال آن هستید تا تصمیم بگیرید که آیا می خواهید برای رفتن به سمت چپ یا راست؟
بیایید آن را انجام دهد در مراحل جداگانه.
اگر (ارزش) چیست؟
[دانشجو] ارزش درخت؟
[Bowden] پس به یاد داشته باشید که من در حال حاضر -
[دانش آموزان، ناخوانا]
[Bowden] آره، حق در اینجا، اجازه دهید بگویم که این فلش سبز
نمونه ای از همان درخت در حال حاضر، یک اشاره گر به اشاره گر است.
بنابراین این بدان معناست که من یک اشاره گر به اشاره گر تا 3.
dereference دو بار صدا خوب است.
چه کار کنم - چگونه می توانم انجام این کار؟
[دانشجو] Dereference یک بار، و پس از آن انجام فلش که در راه است؟
[Bowden] پس (درخت *) dereference یک بار، -> ارزش
رفتن به مقدار گره است که من به طور غیر مستقیم به اشاره به من می دهد.
پس من هم می توانید آن را ** tree.value اگر شما ترجیح می دهید که می نویسم.
در هر دو صورت کار می کند.
در صورتی که این مورد، پس از آن من می خواهم به تماس قرار دادن با ارزش است.
و به روز شده است من گره ** خواهد بود؟
من می خواهم برای رفتن به سمت چپ، به طوری tree.left ** رفتن به سمت چپ من.
و من می خواهم اشاره گر به چیزی که
به طوری که اگر در سمت چپ به پایان می رسد تا اشاره گر تهی،
من می توانم آن را برای اشاره به گره جدید من را تغییر دهند.
>> و در مورد دیگر می تواند بسیار مشابه است.
اجازه دهید در واقع که سه تایی من در حال حاضر.
قرار دادن مقدار اگر مقدار <(درخت **). ارزش.
سپس ما می خواهیم برای به روز رسانی ** ما را به سمت چپ،
دیگری که ما می خواهیم برای به روز رسانی ** ما را به سمت راست.
[دانشجو] که اشاره گر به اشاره گر؟
[Bowden] به یاد داشته باشید که - ** tree.right یک ستاره گره.
[دانشجو، ناخوانا] >> آره.
** tree.right مانند این اشاره گر و یا چیزی است.
بنابراین با در نظر گرفتن اشاره گر به آن که مرا به آنچه من می خواهم
اشاره گر به آن مرد است.
[دانشجو] آیا ما به بیش از دوباره همین دلیل ما در حال استفاده از این دو اشاره گر؟
[Bowden] آره. پس - نه، شما می توانید، و این راه حل را قبل از
یک راه انجام آن بدون انجام دو اشاره گر بود.
شما باید قادر به درک با استفاده از دو اشاره گر،
و این یک راه حل پاک کننده است.
همچنین، توجه کنید که، چه اتفاقی می افتد اگر درخت من -
چه اتفاقی می افتد اگر ریشه من تهی بود؟ اگر من این کار را در مورد حق در اینجا، چه اتفاقی می افتد؟
بنابراین گره * ریشه = NULL، قرار دادن 4 به و ریشه.
چه ریشه می خواهم بعد از این می شود؟
[دانشجو، ناخوانا] >> آره.
ارزش ریشه به 4.
سمت چپ ریشه رفتن به تهی، حق ریشه است برای رفتن به تهی.
در مورد که در آن ما از ریشه با آدرس منتقل می کند نیست،
ما می تواند ریشه را تغییر دهید.
در مورد که در آن درخت - از کجا ریشه تهی بود،
ما فقط مجبور به بازگشت به نادرست. چیزی که می تواند انجام دهد وجود دارد.
ما می توانیم از یک گره به درخت خالی درج نیست.
اما در حال حاضر ما می توانیم، ما فقط یک درخت خالی را به یک درخت یک گره است.
که معمولا انتظار می رود که آن را قرار است به کار است.
>> علاوه بر این، این است که به طور معنی داری کوتاه تر از
همچنین پیگیری از پدر و مادر، و بنابراین شما تکرار کردن تمام راه را.
حالا من باید پدر و مادر من، و من فقط باید به پدر و مادر اشاره گر من حق را به هر چیز دیگری.
در عوض، اگر ما این تکرار شونده، آن را می شود ایده همین کار را با حلقه در حالی که.
اما به جای داشتن برای مقابله با اشاره پدر و مادر من،
به جای اشاره گر فعلی من خواهد بود چیزی که
که من به طور مستقیم تغییر برای اشاره به گره جدید است.
من لازم نیست که برای مقابله با آیا آن را با اشاره به سمت چپ.
من لازم نیست که برای مقابله با آیا آن را با اشاره به سمت راست.
فقط هر چه این اشاره گر، من قصد دارم به آن را برای اشاره به گره جدید است.
هر کس به درک چگونه کار می کند؟
اگر نه چرا ما می خواهیم به این ترتیب آن را انجام دهد،
اما حداقل است که این کار را به عنوان یک راه حل است؟
[دانشجو] از کجا ما بازگشت درست است؟
[Bowden] که احتمالا حق در اینجا.
اگر ما به درستی آن را درج کنید، بازگشت درست است.
دیگری، پایین در اینجا ما قصد داریم که می خواهید به بازگشت هر چه بازده درج.
>> و چه چیزی خاص در مورد این تابع بازگشتی؟
این دم بازگشتی است، بنابراین تا زمانی که ما با برخی از بهینه سازی کامپایل،
آن را خواهد داد که و شناسایی شما خواهد شد سرریز پشته از این هرگز،
حتی اگر درخت به ارتفاع 10،000 یا 10 میلیون.
[دانشجو، ناخوانا]
[Bowden] من فکر می کنم آن را در داش - و یا چه سطحی بهینه سازی
برای بازگشت دم به رسمیت شناخته شود، مورد نیاز است.
من فکر می کنم آن را به رسمیت می شناسد - شورای همکاری خلیج فارس و صدای جرنگ جرنگ
همچنین معانی مختلف برای سطح بهینه سازی خود را داشته باشد.
من می خواهم بگویم آن DashO 2، مطمئن باشید که آن را بازگشت دم به رسمیت.
اما ما - شما می تواند مانند یک مثال و یا چیزی Fibonocci ساخت.
این آسان برای تست با این نیست، چرا که این مشکل را برای ساخت
یک درخت دودویی است که خیلی بزرگ است.
اما بله، من فکر می کنم آن را DashO 2،
اگر شما با DashO 2 کامپایل، آن را برای بازگشت دم نگاه
و بهینه سازی که از.
بازگشت به - قرار دادن به معنای واقعی کلمه آخرین چیزی که به آن نیاز دارد.
بیایید برگردید به درج در اینجا
جایی که ما قصد انجام همان ایده است.
هنوز هم نقص که نمی توانند به طور کامل مسئولیت رسیدگی به
زمانی که ریشه خود تهی است، و یا ورود به گذشته تهی است،
اما به جای برخورد با پدر و مادر اشاره گر،
اجازه دهید به کار بردن منطق همان نگه داشتن اشاره گر به اشاره گر.
اگر اینجا ما حفظ گره ** فعلی،
و ما لازم نیست برای پیگیری دیگر
اما گره ** فعلی = درخت.
و حلقه در حالی که در حال حاضر ما این است که در حالی که فعلی * تهی برابر نیست.
آیا لازم نیست آهنگ از پدر و مادر برای حفظ دیگر.
آیا نیاز به پیگیری از چپ و راست.
و من آن را موقت تماس بگیرید، چرا که ما در حال حاضر با استفاده از دما است.
باشه. بنابراین اگر (ارزش> * دما)،
پس از آن و (موقت) -> حق
دیگری دما = (* دما) -> سمت چپ.
و در حال حاضر، در این مرحله، پس از این حلقه در حالی که،
من فقط این کار را چرا که شاید آن را آسان تر به فکر می کنم در مورد مکررا از به صورت بازگشتی،
اما پس از این حلقه در حالی که،
* موقت اشاره گر ما می خواهید به تغییر است.
>> قبل از اینکه ما تا به حال پدر و مادر، و ما می خواستیم به تغییر یا چپ پدر و مادر و یا پدر و مادر حق،
اما اگر می خواهید به تغییر حق پدر و مادر،
پس از آن دما * حق پدر و مادر است، و ما می توانیم آن را به طور مستقیم تغییر دهید.
تا پایین در اینجا، ما می توانیم * دما = newnode، انجام دهند و که در آن است.
بنابراین اطلاع، همه ما در این بود را از خط کد.
به منظور پیگیری از پدر و مادر در این است که تلاش اضافی.
در اینجا، اگر ما فقط پیگیری از اشاره گر به اشاره گر،
و حتی اگر ما می خواستیم به خلاص شدن از شر تمام این آکولاد در حال حاضر،
این که آن را کوتاه تر است.
این در حال حاضر راه حل همان است،
اما خطوط کمتری از کد.
هنگامی که شما شروع به شناخت این امر به عنوان یک راه حل معتبر،
آن را نیز آسان تر است به همین دلیل در مورد از مانند، خوب،
چرا این پرچم در سمت راست داده int؟
به چه معنا است؟ آه، آن را به این مفهوم است که
هر بار که من به حق، من نیاز به آن مجموعه،
اگر دیگری به سمت چپ من نیاز به آن را به صفر است.
در اینجا، من را ندارد به همین دلیل است که در مورد آن را فقط ساده تر به فکر کردن در مورد.
پرسش و پاسخ؟
[دانشجو، ناخوانا] >> آره.
خوب، پس در بیت آخر -
من حدس می زنم سریع و آسان تابع ما می توانیم انجام دهیم این است،
let's - با هم، من حدس می زنم، سعی کنید و ارسال نامه شامل تابع
که اصلا برام مهم نیست که آیا آن است که یک درخت جستجوی دودویی.
این تابع شامل بازگشت واقعی
اگر در هر جای این درخت به طور کلی ارزش ما به دنبال است.
بنابراین برای اولین بار آن را انجام دهد به صورت بازگشتی و سپس ما آن را مکررا انجام دهد.
ما در واقع فقط می توانید آن را با هم انجام دهید، به دلیل این است که رفتن به واقعا کوتاه است.
>> مورد پایه من چه می شود؟
[دانشجو، ناخوانا]
[Bowden] پس اگر (درخت == NULL)، پس از آن چه؟
[دانشجو] [بازگشت نادرست است.
[Bowden دیگر، خوب، من دیگری نیاز نیست.
اگر مورد پایه دیگر من بود.
ارزش [دانشجو] درخت؟ >> آره.
بنابراین اگر (درخت> مقدار ==.
توجه داشته باشید که ما در حال بازگشت به * گره، گره ** نیست؟
حاوی هرگز نیاز به استفاده از یک گره **
از آنجایی که ما در حال تغییر اشاره گر نیست.
ما فقط آنها را به تراورس.
در صورتی که اتفاق می افتد، پس از آن ما می خواهیم به بازگشت واقعی است.
دیگری که ما می خواهیم به گذشتن از کودکان است.
بنابراین ما نمی توانیم استدلال در مورد اینکه آیا همه چیز را به سمت چپ کمتر است
و همه چیز را به سمت راست بزرگتر است.
پس چه وضعیت ما خواهد بود در اینجا - و یا، چه می خواهیم کاری انجام دهید؟
[دانشجو، ناخوانا] >> آره.
بازگشت شامل (ارزش، درخت،> سمت چپ)
و یا شامل (ارزش، درخت،> سمت راست). و آن است.
و متوجه است که برخی از ارزیابی اتصال کوتاه وجود دارد،
جایی که اگر ما اتفاق می افتد را به پیدا کردن مقدار در سمت چپ درخت،
ما هرگز نیاز به در درخت سمت راست نگاه کنید.
این تابع کل است.
در حال حاضر این کار را انجام تکرار شونده،
است که به کمتر خوب است.
ما می خواهیم شروع معمول گره * درخت فعلی =.
در حالی که (فعلی = NULL).
به سرعت با رفتن به یک مشکل.
اگر فعلی - در اینجا، اگر ما تا به حال از این،
پس از آن ما را از اداره امور را به نگاهی، به طوری بازگشت کاذب.
اگر (فعلی> مقدار ==) بازگشت، درست است.
بنابراین در حال حاضر، ما در یک محل -
ما نمی دانیم که آیا ما می خواهیم برای رفتن به سمت چپ یا راست.
پس خودسرانه، اجازه دهید فقط به سمت چپ.
من به وضوح به شماره جایی که من همه چیز را به طور کامل رها شده اجرا می شود -
من فقط تا کنون در سمت چپ یک درخت را بررسی کنید.
من به هر چیزی است که فرزند راست هر چیزی را بررسی کنید هرگز.
چگونه می توانم این را حل کنم؟
[دانشجو] شما را به نگه داشتن مسیر از سمت چپ و راست در پشته.
[Bowden] آره. بنابراین ایجاد آن
ساختار فهرست، گره * N، و سپس گره * بعد؟
من فکر می کنم که خوب کار می کند.
ما می خواهیم به بیش از چپ، یا let's - تا اینجا.
ساختار لیست = فهرست، آن را شروع
از در این لیست ساختار.
* فهرست = NULL. به طوری که برای رفتن به لیست پیوندی ما
subtrees که ما از آنها صرف بیش از
ما می رویم به تراورس به سمت چپ در حال حاضر،
اما از آنجایی که ما به ناچار نیاز به دوباره به سمت راست،
ما قصد داریم برای حفظ سمت راست در داخل لیست ساختار ما.
سپس خواهیم new_list یا ساختار داشته باشد،
ساختار فهرست *، new_list = malloc (sizeof (فهرست)).
من قصد دارم به چشم پوشی از خطا چک کردن اینکه، اما شما باید چک کردن null در صورتی که آن را برای دیدن.
New_list گره آن را برای رفتن به نقطه را به -
آه، به همین دلیل است که من آن را می خواستم تا در اینجا. رفتن به نقطه را به یک لیست ساختار دوم.
که چقدر مرتبط با کار لیست.
این همان است که در فهرست اعضای هیات تحریریه در ارتباط است
به جز ما فقط به جای بین المللی همراه با گره.
این دقیقا همان است.
بنابراین new_list، به ارزش گره new_list ما،
رفتن به فعلی حق است.
به ارزش ما new_list بعدی> رفتن به فهرست اصلی ما،
و پس از آن ما قصد داریم برای به روز رسانی فهرست ما را به اشاره به new_list.
>> در حال حاضر ما نیاز به نوعی از راه از همه چیز کشیدن،
داریم طی کل زیر درخت سمت چپ است.
در حال حاضر ما نیاز به جلو و مسائل خارج از آن،
مانند فعلی تهی است، ما نمی خواهیم فقط به بازگشت غلط است.
ما می خواهیم به جلو و در حال حاضر در خارج در فهرست جدید ما.
یک راه مناسب برای انجام این کار - خب، در واقع، راه های متعدد برای انجام این کار وجود دارد.
هر کس یک پیشنهاد؟
که در آن من باید از این و یا چگونه من باید این کار را انجام دهند کاری انجام دهید؟
ما فقط چند دقیقه، اما هر گونه پیشنهاد؟
به جای - یکی از راه، به جای آن از وضعیت ما در حالی که،
چیزی است که ما در حال حاضر به دنبال این است تهی نیست،
در عوض ما در حال رفتن به ادامه بروید تا لیست ما به خودی خود پوچ است.
بنابراین اگر لیست ما به پایان می رسد تا اینکه تهی،
پس از آن ما از اداره امور را به دنبال، به جستجوی.
اما این بدان معنی است که اولین چیزی که در فهرست ما فقط رفتن به اولین گره.
اولین چیزی که بسیار خواهد بود - ما دیگر نیازی به دید که.
لیست> N درخت ما خواهد بود.
لیست بعدی> رفتن به تهی.
و حالا در حالی که لیست تهی برابر نیست.
فعلی است که رفتن به جلو و چیزی از لیست ما است.
بنابراین فعلی برابر لیست> N.
و سپس رفتن به برابر لیست> N و یا لیست بعدی>.
بنابراین اگر ارزش فعلی برابر است با ارزش.
در حال حاضر ما می توانیم هر دو اشاره گر حق ما و اشاره گر چپ ما اضافه کنید
تا زمانی که آنها تهی نیست.
را در اینجا، من حدس می زنم که ما باید انجام داده اند که در وهله اول.
اگر (فعلی> حق! = NULL)
پس از آن ما در حال رفتن به درج این گره را به لیست ما است.
اگر (فعلی سمت چپ)، این است که یک کمی کار اضافی است، اما آن را خوب است.
اگر (فعلی سمت چپ = NULL)،
و ما در حال رفتن به سمت چپ به ما لیست پیوندی درج،
و است که باید آن است.
ما تکرار - تا زمانی که ما چیزی در لیست ما،
ما باید یکی دیگر از گره به نگاه در.
بنابراین ما نگاه کنید که در آن گره،
لیست ما پیشرفت ما را به یکی بعدی.
در صورتی که گره ارزش است که ما به دنبال آن هستید، ما می توانیم بازگشت درست است.
دیگری هر دو سمت چپ و راست ما subtrees درج،
تا زمانی که آنها تهی نیست، به لیست ما
به طوری که ما به ناچار بر آنها بروید.
بنابراین اگر آنها تهی نیست،
اگر اشاره گر ریشه ما با اشاره به دو چیز،
پس از آن در ابتدا ما کشیده چیزی از لیست ما به پایان می رسد تا اینکه تهی است.
ما را دو چیز را پشت در، به طوری که در حال حاضر لیست ما است از اندازه 2.
آنگاه ما در حال رفتن به حلقه به بالا و ما فقط رفتن به جلو،
بیایید می گویند، اشاره گر چپ گره ریشه ما.
و این فقط اتفاق می افتد نگه دارید، ما را به پایان خواهم حلقه بیش از همه چیز.
>> توجه داشته باشید که این به طور قابل توجهی پیچیده تر بود
در راه حل بازگشتی.
و من چند بار گفته ام
که راه حل بازگشتی معمولا دارای نقاط مشترک زیادی با تکرار راه حل است.
در اینجا این است که دقیقا همان چیزی است که راه حل بازگشتی در حال انجام است.
تنها تغییر این است که به جای به طور ضمنی با استفاده از پشته، پشته برنامه،
به عنوان راه خود را از پیگیری از گره شما هنوز هم نیاز به بازدید،
در حال حاضر شما به صراحت با استفاده از لیست پیوندی.
در هر دو مورد شما پیگیری از چه گره هنوز هم نیاز به بازدید.
در صورت بازگشتی آن فقط ساده تر چون پشته
برای شما به عنوان پشته برنامه اجرا شده است.
توجه کنید که این لیست در ارتباط، آن است که یک پشته.
هر چه ما فقط در پشته قرار داده است
است، بلافاصله آنچه که ما در حال رفتن به جلو و پشته به دیدار بعدی.
ما از زمان است، اما هر گونه سؤال؟
[دانشجو، ناخوانا]
[Bowden] آره. بنابراین اگر ما لیست پیوندی ما
در حال حاضر در حال رفتن به نقطه را به این پسر،
و در حال حاضر ما فقط لیست پیوندی ما به تمرکز بر روی این پسر.
ما در حال عبور بر روی لیست پیوندی که در خط است.
و پس از آن من حدس می زنم که ما باید به لیست پیوندی و چیزهای رایگان
یک بار قبل از بازگشت به درست یا غلط، ما نیاز به
تکرار بیش از ما لیست پیوندی و همیشه در اینجا، من حدس می زنم،
اگر ما فعلی برابر است، آن را اضافه کنید، بنابراین در حال حاضر ما می خواهیم آزاد
فعلی است، زیرا به خوبی، اما ما به طور کامل در مورد این لیست را فراموش کرده ام؟ آره.
به طوری که این چیزی است که ما می خواهیم به انجام می باشد.
اشاره گر کجاست؟
فعلی بود و سپس - ما می خواهیم به ساختار * 10 برابر است لیست بعدی.
رایگان فهرست، فهرست = دمای
و در مورد که در آن ما به راست، ما نیازی به تکرار
بیش از باقی مانده از لیست پیوندی ما آزاد همه چیز است.
چیز خوب در مورد راه حل بازگشتی آزاد همه چیز
فقط بدان معناست factorings ظاهر کردن پشته که برای شما اتفاق می افتد.
بنابراین ما از چیزی است که مانند 3 خط سخت به فکر می کنم در مورد کد رفته
به چیزی است که به طور معنی داری بیشتر بسیاری از سخت به فکر می کنم در مورد خط کد است.
هر گونه سؤال؟
بسیار خوب. ما خوب است. خداحافظ!
[CS50.TV]