מאי.09

כמה עצי חיפוש יייחודיים ניתן לבנות ששומרים n...1 מספרים

כמה עצי חיפוש יייחודיים ניתן לבנות ששומרים n...1 מספרים

נתון מספר n. יש להחזיר רשימה של כל העצים שניתן לבנות ממספרים 1...n

1. כל מספר מ1 עד n יכול להיות root בעץ חיפוש בינארי

2. כאשר אנחנו בוחרים מספר k מתוך 1..n מספרים כ root - כל המספרים קטנים מ k יהיה מצד שמאל של root, וכל הגדולים מצד ימין.

3. אפשר להגיד שעץ מורכב מתת עצים - לכן פתרון רקורסיבי יהיה הכי פשוט להבנה.

  1. public List<TreeNode> generateTrees(int n) {
  2. return genTreeList(1, n);
  3. }
  4.  
  5. private List<TreeNode> genTreeList(int start, int end) {
  6. List<TreeNode> list = new List<TreeNode>();
  7. if(start > end)
  8. list.Add(null);
  9. for(int i = start; i<=end; i++) {
  10. List<TreeNode> leftList = genTreeList(start, i-1);
  11. List<TreeNode> rightList = genTreeList(i+1, end);
  12. foreach(TreeNode left in leftList){
  13. foreach(TreeNode right in rightList) {
  14. TreeNode root = new TreeNode(i);
  15. root.left = left;
  16. root.right = right;
  17. list.Add(root);
  18. }
  19. }
  20. }
  21. return list;
  22. }

 


תגיות:
שתף את הסיפור הזה:

תגובות(0)

השאירו תגובה

קפטצ'ה לא מתאימה

תגובה