//ט. כניסה: הפונקצייה מקבלת מחרוזת של ביטוי חשבוני //ט. יציאה: הפונקצייה מחזירה עץ בינארי המורכב משמאל לימין לפי הביטוי static BinTreeNode <string> BuildTreeOfParser(String str) { BinTreeNode <string> tr = null; for (int i = str.Length - 1; i > 0; i--) { if (((str[i] == '+' || str[i] == '-') && tr == null) && str[i - 1] != '*' && str[i - 1] != '/' && str[i - 1] != '^') { if (str[i - 1] == '-' || str[i - 1] == '+') { tr = new BinTreeNode <string>(str[i - 1].ToString()); tr.SetRight(BuildTreeOfParser(str.Substring(i, str.Length - i))); tr.SetLeft(BuildTreeOfParser(str.Substring(0, i - 1))); } else { tr = new BinTreeNode <string>(str[i].ToString()); tr.SetRight(BuildTreeOfParser(str.Substring(i + 1, str.Length - i - 1))); tr.SetLeft(BuildTreeOfParser(str.Substring(0, i))); } } } for (int i = str.Length - 1; i > 0; i--) { if ((str[i] == '*' || str[i] == '/') && tr == null) { tr = new BinTreeNode <string>(str[i].ToString()); tr.SetRight(BuildTreeOfParser(str.Substring(i + 1, str.Length - i - 1))); tr.SetLeft(BuildTreeOfParser(str.Substring(0, i))); } } for (int i = str.Length - 1; i > 0; i--) { if ((str[i] == '^') && tr == null) { tr = new BinTreeNode <string>(str[i].ToString()); tr.SetRight(BuildTreeOfParser(str.Substring(i + 1, str.Length - i - 1))); tr.SetLeft(BuildTreeOfParser(str.Substring(0, i))); } } if (tr == null) { tr = new BinTreeNode <string>(str); } return(tr); }
//ט. כניסה: הפונקצייה מקבלת עץ בינארי //ט. יציאה: הפונקצייה מחשבת את ערך העץ לפי סדר פעולות חשבון ועוברת על העץ משמאל לימין static double CalculateTreeOfParser(BinTreeNode <string> t) { if (t != null) { if (t.GetInfo() == "+") { return(CalculateTreeOfParser(t.GetLeft()) + CalculateTreeOfParser(t.GetRight())); } else if (t.GetInfo() == "-") { return(CalculateTreeOfParser(t.GetLeft()) - CalculateTreeOfParser(t.GetRight())); } else if (t.GetInfo() == "*") { return(CalculateTreeOfParser(t.GetLeft()) * CalculateTreeOfParser(t.GetRight())); } else if (t.GetInfo() == "/") { return(CalculateTreeOfParser(t.GetLeft()) / CalculateTreeOfParser(t.GetRight())); } else if (t.GetInfo() == "^") { return(Math.Pow(CalculateTreeOfParser(t.GetLeft()), CalculateTreeOfParser(t.GetRight()))); } } int s; try { return(double.Parse(t.GetInfo())); } catch (Exception flow) { return(0); } }
public void SetRight(BinTreeNode <T> tree) { this.right = tree; }
public void SetLeft(BinTreeNode <T> tree) { this.left = tree; }
public BinTreeNode(BinTreeNode <T> left, T x, BinTreeNode <T> right) { this.left = left; this.info = x; this.right = right; }
public BinTreeNode(T x) { this.left = null; this.info = x; this.right = null; }