ทุกคนสามารถอธิบายความแตกต่างระหว่างแผนภูมิต้นไม้และต้นไม้ค้นหาแบบไบนารี ด้วยตัวอย่างได้หรือไม่?
ทุกคนสามารถอธิบายความแตกต่างระหว่างแผนภูมิต้นไม้และต้นไม้ค้นหาแบบไบนารี ด้วยตัวอย่างได้หรือไม่?
คำตอบ:
ต้นไม้ไบนารี: ต้นไม้ที่แต่ละโหนดมีมากถึงสองใบ
1
/ \
2 3
ต้นไม้ค้นหาแบบทวิภาค: ใช้สำหรับการค้นหา ต้นไม้ไบนารีที่ลูกซ้ายมีเพียงโหนดที่มีค่าน้อยกว่าโหนดหลักและตำแหน่งที่เด็ก ๆ ขวาเท่านั้นมีโหนดที่มีค่ามากกว่าหรือเท่ากับผู้ปกครอง
2
/ \
1 3
Binary Treeเป็นรูปแบบเฉพาะของต้นไม้ที่มีลูกสองคน (ลูกซ้ายและลูกขวา) มันเป็นเพียงการแสดงข้อมูลในโครงสร้างต้นไม้
Binary Search Tree (BST)เป็น Binary Tree ชนิดพิเศษที่ตามเงื่อนไขต่อไปนี้:
ต้นไม้ไบนารีทำจากโหนดที่แต่ละโหนดมีตัวชี้ "ซ้าย" ตัวชี้ "ขวา" และองค์ประกอบข้อมูล ตัวชี้ "root" ชี้ไปที่โหนดบนสุดในทรี พอยน์เตอร์ซ้ายและขวาชี้ซ้ำไปที่ "ทรีย่อย" ที่เล็กลงทั้งสองข้าง พอยน์เตอร์พอยน์เตอร์แสดงถึงต้นไม้ไบนารีที่ไม่มีองค์ประกอบ - ต้นไม้ว่าง นิยามแบบเรียกซ้ำอย่างเป็นทางการคือ: ต้นไม้ไบนารีเป็นทั้งว่างเปล่า (แสดงโดยตัวชี้โมฆะ) หรือทำจากโหนดเดียวที่ตัวชี้ซ้ายและขวา (คำนิยามซ้ำไปข้างหน้า) แต่ละจุดไปยังต้นไม้ไบนารี
ต้นไม้ค้นหาแบบไบนารี่ (BST) หรือ "ต้นไม้ไบนารีที่สั่งซื้อ" เป็นประเภทของต้นไม้แบบทวิภาคที่มีการจัดเรียงโหนดตามลำดับ: สำหรับแต่ละโหนดองค์ประกอบทั้งหมดในทรีย่อยทางซ้ายของมันจะน้อยกว่าโหนด (<) และองค์ประกอบทั้งหมด ในทรีย่อยด้านขวามีค่ามากกว่าโหนด (>)
5
/ \
3 6
/ \ \
1 4 9
ทรีที่แสดงด้านบนเป็นแผนผังการค้นหาแบบไบนารี่ - โหนด "รูท" คือ 5 และโหนดทรีย่อยทางซ้าย (1, 3, 4) คือ <5 และโหนดทรีย่อยทางขวา (6, 9) คือ> 5 ทรีย่อยแต่ละทรีจะต้องปฏิบัติตามข้อ จำกัด ทรีการค้นหาแบบไบนารีด้วย: ในทรีย่อย (1, 3, 4), 3 คือรูท, 1 <3 และ 4> 3
ระวังคำที่ถูกต้องในปัญหา - "แผนภูมิการค้นหาแบบไบนารี" แตกต่างจาก "ต้นไม้แบบไบนารี"
ตามที่ทุกคนด้านบนได้อธิบายเกี่ยวกับความแตกต่างระหว่างต้นไม้ไบนารีและต้นไม้ค้นหาแบบไบนารีฉันแค่เพิ่มวิธีทดสอบว่าต้นไม้ไบนารีที่กำหนดนั้นเป็นต้นไม้ค้นหาแบบไบนารีหรือไม่
boolean b = new Sample().isBinarySearchTree(n1, Integer.MIN_VALUE, Integer.MAX_VALUE);
.......
.......
.......
public boolean isBinarySearchTree(TreeNode node, int min, int max)
{
if(node == null)
{
return true;
}
boolean left = isBinarySearchTree(node.getLeft(), min, node.getValue());
boolean right = isBinarySearchTree(node.getRight(), node.getValue(), max);
return left && right && (node.getValue()<max) && (node.getValue()>=min);
}
หวังว่ามันจะช่วยคุณ ขออภัยถ้าฉันเปลี่ยนจากหัวข้อเพราะฉันรู้สึกว่ามันควรค่าแก่การกล่าวถึงที่นี่
ต้นไม้ไบนารีหมายถึงโครงสร้างข้อมูลที่ถูกสร้างขึ้นจากโหนดที่สามารถเพียง แต่มีเด็กสองคนอ้างอิง
ในทางกลับกัน Binary Search Tree ( BST ) เป็นรูปแบบพิเศษของโครงสร้างข้อมูลแบบไบนารีซึ่งแต่ละโหนดมีค่าที่เปรียบเทียบกันได้และเด็กที่มีค่าน้อยกว่าจะแนบกับเด็กที่มีมูลค่าทางซ้ายและใหญ่กว่าที่ติดอยู่ทางขวา
ดังนั้นBSTทั้งหมดคือBinary Treeแต่Binary Treeบางอย่างอาจเป็นBSTเท่านั้น แจ้งให้ทราบว่าBSTเป็นส่วนหนึ่งของต้นไม้ไบนารี
ดังนั้นต้นไม้ไบนารีเป็นมากกว่าทั่วไปข้อมูลโครงสร้างกว่าBinary ค้นหาต้นไม้ และยังให้คุณได้แจ้งให้ทราบว่าBinary ค้นหาต้นไม้เป็นเรียงต้นไม้ในขณะที่ไม่มีชุดดังกล่าวของกฎระเบียบสำหรับการทั่วไปต้นไม้ไบนารี
Binary Tree
ซึ่งเป็นไม่BST
;
5
/ \
/ \
9 2
/ \ / \
15 17 19 21
ค้นหาแบบไบนารีต้นไม้ซึ่งยังเป็นต้นไม้ไบนารี ;
50
/ \
/ \
25 75
/ \ / \
20 30 70 80
นอกจากนี้ยังแจ้งว่าสำหรับโหนดแม่ใด ๆในBST ;
โหนดด้านซ้ายทั้งหมดมีค่าน้อยกว่าค่าของโหนดพาเรนต์ ในตัวอย่างด้านบนโหนดที่มีค่า {20, 25, 30} ซึ่งอยู่ทางด้านซ้าย ( ลูกหลานซ้าย ) ของ 50 มีขนาดเล็กกว่า 50
โหนดด้านขวาทั้งหมดมีค่ามากกว่าค่าของโหนดพาเรนต์ ในตัวอย่างด้านบนโหนดที่มีค่า {70, 75, 80} ซึ่งทั้งหมดตั้งอยู่ทางด้านขวา ( ลูกหลานขวา ) ที่ 50 มีค่ามากกว่า 50
ไม่มีกฎดังกล่าวสำหรับโหนดต้นไม้ไบนารี กฎเฉพาะสำหรับต้นไม้ไบนารีโหนดจะมีสองเด็กจึงตนเองอธิบายตัวเองว่าทำไมเรียกว่าไบนารี
แผนผังการค้นหาแบบไบนารี่เป็นต้นไม้ไบนารีชนิดพิเศษซึ่งแสดงคุณสมบัติต่อไปนี้: สำหรับโหนดใด ๆ ค่าของโหนดที่สืบทอดทุกค่าในทรีย่อยทางซ้ายของ n จะน้อยกว่าค่าของ n และค่าของโหนดลำดับที่อยู่ด้านขวาทั้งหมดคือ มากกว่าค่าของ n
ต้นไม้ไบนารี
ต้นไม้ไบนารีสามารถเป็นอะไรก็ได้ที่มีลูก 2 คนและผู้ปกครอง 1 คน สามารถนำไปใช้เป็นรายการหรืออาร์เรย์ที่เชื่อมโยงหรือกับ API ที่กำหนดเองของคุณ เมื่อคุณเริ่มที่จะเพิ่มกฎที่เฉพาะเจาะจงมากยิ่งขึ้นในมันจะกลายเป็นมากขึ้นต้นไม้เฉพาะ การนำไปปฏิบัติที่รู้จักกันมากที่สุดคือการเพิ่มโหนดขนาดเล็กด้านซ้ายและใหญ่กว่าด้านขวา
ยกตัวอย่างเช่นต้นไม้ไบนารีที่มีข้อความที่มีขนาดและความสูง 9 3 กับโหนดรากที่มีค่า 2. ต้นไม้ที่ไม่สมดุลและไม่ได้เรียง https://en.wikipedia.org/wiki/Binary_tree
ตัวอย่างเช่นในต้นไม้ทางด้านซ้าย A มีลูก 6 คน {B, C, D, E, F, G} มันสามารถแปลงเป็นต้นไม้ไบนารีทางด้านขวา
ค้นหาแบบทวิภาค
การค้นหาแบบไบนารี่เป็นเทคนิค / อัลกอริทึมที่ใช้ในการค้นหารายการเฉพาะบนโหนดเชน การค้นหาแบบไบนารีทำงานบนอาร์เรย์ที่เรียงลำดับแล้ว
การค้นหาแบบไบนารีเปรียบเทียบค่าเป้าหมายกับองค์ประกอบกลางของอาร์เรย์ หากพวกเขาไม่เท่ากันครึ่งที่เป้าหมายไม่สามารถกำจัดได้จะถูกตัดออกและการค้นหาจะดำเนินต่อไปในครึ่งที่เหลือจนกว่าจะประสบความสำเร็จหรือครึ่งที่เหลือนั้นว่างเปล่า https://en.wikipedia.org/wiki/Binary_search_algorithm
ต้นไม้เป็นตัวแทนค้นหาแบบทวิภาค อาร์เรย์ที่ค้นหาที่นี่คือ [20, 30, 40, 50, 90, 100] และค่าเป้าหมายคือ 40
แผนผังการค้นหาแบบทวิภาค
นี่เป็นหนึ่งในการนำไปใช้ของต้นไม้ไบนารี นี้เป็นพิเศษสำหรับการค้นหา
โครงสร้างต้นไม้ค้นหาไบนารีและ B ต้นไม้ข้อมูลที่อยู่บนพื้นฐานของการค้นหาแบบไบนารี
ต้นไม้การค้นหาแบบไบนารี่ (BST) บางครั้งเรียกว่าการเรียงลำดับหรือการจัดเรียงต้นไม้แบบทวิตเป็นชนิดของคอนเทนเนอร์เฉพาะ : โครงสร้างข้อมูลที่เก็บ "รายการ" (เช่นตัวเลขชื่อ ฯลฯ ) ในหน่วยความจำ https://en.wikipedia.org/wiki/Binary_search_tree
แผนผังการค้นหาไบนารีขนาด 9 และความลึก 3 โดยมี 8 ที่รูท ใบไม่ถูกวาด
และในที่สุดสกีมาที่ยอดเยี่ยมสำหรับการเปรียบเทียบประสิทธิภาพของโครงสร้างข้อมูลและอัลกอริธึมที่รู้จักกันดีนั้นถูกนำไปใช้:
ภาพที่นำมาจากอัลกอริทึม (รุ่นที่ 4)
ต้นไม้ไบนารีเป็นต้นไม้ที่เด็กไม่เคยเกินสอง แผนภูมิการค้นหาแบบไบนารีจะตามด้วยค่าคงที่ที่เด็กซ้ายควรมีค่าน้อยกว่าคีย์ของโหนดรูทในขณะที่เด็กที่ถูกต้องควรมีค่ามากกว่าคีย์ของรูทโหนด
ในการตรวจสอบสภาพอากาศหรือไม่ต้นไม้ไบนารีที่กำหนดเป็นต้นไม้ค้นหาแบบไบนารีนี่คือวิธีการทางเลือก
Traverse Tree In Inorder Fashion (เช่น Left Child -> Parent -> Child Right), เก็บข้อมูล Traversed Node ในตัวแปรชั่วคราวให้พูดtempก่อนที่จะเก็บไว้ในtempตรวจสอบข้อมูลปัจจุบันของโหนดสูงกว่าก่อนหน้านี้หรือไม่ . จากนั้นก็แยกมันออกมาทรีไม่ใช่ไบนารี่ทรีค้นหามิฉะนั้นจะสิ้นสุดลง
ด้านล่างเป็นตัวอย่างกับ Java:
public static boolean isBinarySearchTree(Tree root)
{
if(root==null)
return false;
isBinarySearchTree(root.left);
if(tree.data<temp)
return false;
else
temp=tree.data;
isBinarySearchTree(root.right);
return true;
}
รักษาตัวแปร temp ไว้ด้านนอก
ในแผนผังการค้นหาแบบไบนารีโหนดทั้งหมดจะถูกจัดเรียงตามลำดับเฉพาะ - โหนดทางด้านซ้ายของรูตโหนดจะมีค่าน้อยกว่ารูทของมันและโหนดทั้งหมดทางด้านขวาของโหนดจะมีค่ามากกว่าค่าของ ราก.
ต้นไม้สามารถเรียกได้ว่าเป็นต้นไม้ไบนารีหากจำนวนสูงสุดของลูกของโหนดใด ๆ คือสอง
ต้นไม้สามารถเรียกได้ว่าเป็นต้นไม้ค้นหาแบบไบนารีถ้าหากจำนวนสูงสุดของลูกของโหนดใด ๆ คือสองและลูกซ้ายจะเล็กกว่าลูกขวาเสมอ