//方法一:直接逆后续遍历。理解了的话,特别好做。 class Solution { TreeNode pre = null; public TreeNode convertBST(TreeNode root) { traversal(root); return root; } public void traversal(TreeNode root){ if(root == null) return; traversal(root.right); if(pre != null) root.val = root.val + pre.val; pre = root; traversal(root.left); } } //迭代:统一格式,逆后序遍历。 class Solution { TreeNode pre = null; public TreeNode convertBST(TreeNode root) { Stack<TreeNode> st = new Stack<>(); if(root != null) st.push(root); while(!st.isEmpty()){ TreeNode node = st.pop(); if(node != null){ if(node.left != null) st.push(node.left); st.push(node); st.push(null); if(node.right != null) st.push(node.right); } else{ node = st.pop();//这一步不能少,否则无法跳出,时间超时 if(pre != null) node.val = node.val + pre.val; pre = node; } } return root; } }
【算法】二叉搜索树生成累加树
最新推荐文章于 2024-09-03 18:29:17 发布