您好,登錄后才能下訂單哦!
今天小編給大家分享一下java四則運算和二叉樹的關系是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
引言
前幾天忽然想到了四則運算和二樹有沒有關系,然后在網絡上檢索了一下,發現還真的有四則運算和二叉樹。
因為總是見到把 四則運算表達式 用 樹 的形式來展示,所以就想著給定一顆表達式樹,計算它的結果出來。
這里是我待會會用到的三顆表達式樹,下面是它的表達式:
1
1+2
(6/2)+(2*(9-10)
這里我設計一個簡單的數據結構,一個普通的節點如下:
一個 root 節點,表示樹的根。然后是下面的子節點。kind 的類型為 INT、ADD、MIN、MUL 和 DIV。即整數、+、-、* 和 /。然后是 value,它只有在 kind 為 INT 時有意義。然后是 left 和 right,左右子節點,如果有的話,就一直這樣遞歸表示下去。
{ "root": { "kind": "INT", "value": 1 } }, { "root": { "kind": "ADD", "value": "+", "left": { "kind": "INT", "value": 1 }, "right": { "kind": "INT", "value": 2 } } },
from typing import Dict, Union def computer(tree: Dict[str, Union[str, int, Dict[str, int]]]) -> int: if not tree: return 0 kind = tree.get("kind") value = tree.get("value") print(f"{kind} ==> {value}") if kind == 'INT': return value # type: ignore left_val = computer(tree.get("left")) # type: ignore right_val = computer(tree.get("right")) # type: ignore if kind == 'ADD': return left_val + right_val elif kind == 'MIN': return left_val - right_val elif kind == 'MUL': return left_val * right_val elif kind == 'DIV': return left_val // right_val else: print(type) raise Exception("unexcepted operator") if __name__ == "__main__": # 測試的樹 test_trees = [ { "root": { "kind": "INT", "value": 1 } }, { "root": { "kind": "ADD", "value": "+", "left": { "kind": "INT", "value": 1 }, "right": { "kind": "INT", "value": 2 } } }, { "root": { "kind": "ADD", "value": "+", "left": { "kind": "DIV", "value": "/", "left": { "kind": "INT", "value": 6 }, "right": { "kind": "INT", "value": 2 } }, "right": { "kind": "MUL", "value": "*", "left": { "kind": "INT", "value": 2 }, "right": { "kind": "MIN", "value": "-", "left": { "kind": "INT", "value": 9 }, "right": { "kind": "INT", "value": 10 } } } } } ] # 計算 for test_tree in test_trees: print(computer(test_tree["root"])) print()
輸出結果:
以上就是“java四則運算和二叉樹的關系是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。